Register to post in forums, or Log in to your existing account
 

Play RetroMUD
Post new topic  Reply to topic     Home » Forums » CMUD Beta Forum
Arde
Enchanter


Joined: 09 Sep 2007
Posts: 605

PostPosted: Tue Oct 16, 2007 8:55 am   

[2.06] Crash with hidden child window and automapper
 
1. Launch CMud
2. Close Sessions Window (ESC)
3. Open Package Editor (CTRL-G)
(C) Vijilante Wink

4. Create a new window, name it somehow and untick "Window is Visible" checkbox. Save and close the editor.
5. Click on the Map button on CMUD toolbar. This brings up the automapper window with default (empty) map.
6. In CMUD menu choose "Close session" or "Close all" item to get the error message:

Code:

exception class   : EListError
exception message : List index out of bounds (0).


At first time I catch this crash "in the wild", not in artificial untitled session, so peoples really could run into this one.
Reply with quote
Arde
Enchanter


Joined: 09 Sep 2007
Posts: 605

PostPosted: Tue Oct 16, 2007 10:05 am   
 
Well, I believe that bug with hidden window and mapper is related to another crash I've got. Can't reproduce it in a new session; it seems to be package-dependent and even opening order dependent. So I gonna describe it here in hope that fixing the first bug will get this fixed too. If not - than I'll start a new thread for 2.07. I've found this bug by accident: first, I'm not use multisession at all, and second: CMUD still not run maximized by default and when I've missed the main menu, I click on CMUD window caption instead, causing it to move.

I have 2 sessions: my primary session and test session.
Primary session: main window + on top of it 5 tabbed child windows + docked to main window mapper window (right, top) and status window (right, bottom). Settings: Show containers:no, Show Caption:no
Test session: main window + invisible child window + empty mapper window (docked to the right of main). Settings: Show containers:no, Show Caption:yes

If I open first my primary session and then my test session, I'll have no tabs to switch between sessions, not any single tab to switch to any window of primary session. I need to use CMUD Window mune to switch windows. I see only 1 tab for main window of test session and automapper, showing the map for primary session. Normally, if open 2 or more sessions, you do get those session tabs. Strangely, if I open my Test session first and primary session after it, I'll get these tabs. I can't understand how is the order in which sessions are opened produces so different results.

The problem: at the point when there is no session tabs visible (although I have 2 or more sessions opened), if I gonna try drag CMUD window, it crashes immediately after window makes any movement. Here is the call stack.
Code:

exception class   : EaqDocking
exception message : Invalid index 1 (1 items total).

Main ($824):
00712a8b +067 cMUD.exe     aqDockingBase   3061   +2 TaqCustomDockingControl.GetChild
00704e1f +0a7 cMUD.exe     aqDocking       3729  +27 TaqVerticalSizer.ResizeChildren
00717c99 +039 cMUD.exe     aqDockingBase   5848   +7 TaqCustomDockingContainer.UpdateScreenBounds
00717cc0 +060 cMUD.exe     aqDockingBase   5855  +14 TaqCustomDockingContainer.UpdateScreenBounds
007161aa +00e cMUD.exe     aqDockingBase   4829   +4 TaqCustomDockingControl.UpdateScreenRect
00718caa +066 cMUD.exe     aqDockingBase   6406   +5 TaqCustomDockingSite.PerformSizeConstraintsUpdate
007091b0 +024 cMUD.exe     aqDocking       5996   +4 TaqDockingSite.PerformSizeConstraintsUpdate
0071e62c +010 cMUD.exe     aqDockingBase   9831   +3 TaqParentedDockingSite.ParentMoved
006d5d98 +010 cMUD.exe     aqDockingUtils  1696   +2 TaqWindowEventFilter.DoMove
006d5ef1 +051 cMUD.exe     aqDockingUtils  1742   +7 TaqWindowEventFilter.WndProc
0047fef0 +014 cMUD.exe     Classes        10966   +8 StdWndProc
77d3e361 +016 USER32.dll                             CallWindowProcA
006d5e8f +0a7 cMUD.exe     aqDockingUtils  1728   +7 CallDefWndProc
006d5ee8 +048 cMUD.exe     aqDockingUtils  1741   +6 TaqWindowEventFilter.WndProc
0047fef0 +014 cMUD.exe     Classes        10966   +8 StdWndProc
7c90eae0 +010 ntdll.dll                              KiUserCallbackDispatcher
77d3e025 +0ba USER32.dll                             DefWindowProcA
77d3e361 +016 USER32.dll                             CallWindowProcA
006b1a0a +082 cMUD.exe     te_hook          241   +8 TControlHook.HookWndProc
0047fef0 +014 cMUD.exe     Classes        10966   +8 StdWndProc
77d3e361 +016 USER32.dll                             CallWindowProcA
00509e00 +13c cMUD.exe     Controls        6369  +23 TWinControl.DefaultHandler
0052880c +084 cMUD.exe     Forms           3770   +7 TCustomForm.DefaultHandler
00506878 +014 cMUD.exe     Controls        4885   +1 TControl.WMWindowPosChanged
0050a9c0 +0bc cMUD.exe     Controls        6666  +11 TWinControl.WMWindowPosChanged
00505f8b +1df cMUD.exe     Controls        4645  +53 TControl.WndProc
00509cba +18e cMUD.exe     Controls        6342  +33 TWinControl.WndProc
00526d98 +478 cMUD.exe     Forms           3098 +103 TCustomForm.WndProc
00bfc094 +020 cMUD.exe     DXSounds        2013   +9 TCustomDXSound.FormWndProc
00bf97f0 +00c cMUD.exe     DXClass          572   +1 TControlSubClass.WndProc
0050988c +034 cMUD.exe     Controls        6237   +3 TWinControl.MainWndProc
0047fef0 +014 cMUD.exe     Classes        10966   +8 StdWndProc
77d3e361 +016 USER32.dll                             CallWindowProcA
006d5e8f +0a7 cMUD.exe     aqDockingUtils  1728   +7 CallDefWndProc
006d5f7d +0dd cMUD.exe     aqDockingUtils  1776  +41 TaqWindowEventFilter.WndProc
0047fef0 +014 cMUD.exe     Classes        10966   +8 StdWndProc
7c90eae0 +010 ntdll.dll                              KiUserCallbackDispatcher
00503b2a +036 cMUD.exe     Controls        3552   +1 TControl.SetBoundsRect
006a5b33 +09f cMUD.exe     te_form         2482  +18 TTeDefaultForm.MoveWindow
006a5b74 +024 cMUD.exe     te_form         2491   +1 TTeDefaultForm.MoveWindow
006a6723 +45b cMUD.exe     te_form         2884  +89 TTeDefaultForm.NCMouseMove
006a90f8 +0a8 cMUD.exe     te_form         4279  +17 TTeDefaultForm.WMMouseMove
006b1e3a +02a cMUD.exe     te_hook          399   +3 TTeHook.DoBeforeMessage
006aba85 +011 cMUD.exe     te_form         5939   +8 TTeDefaultForm.DoBeforeMessage
006b174c +08c cMUD.exe     te_hook          171   +7 TControlHook.NotifyHooks
006b19ba +032 cMUD.exe     te_hook          236   +3 TControlHook.HookWndProc
0047fef0 +014 cMUD.exe     Classes        10966   +8 StdWndProc
77d3e361 +016 USER32.dll                             CallWindowProcA
00509e00 +13c cMUD.exe     Controls        6369  +23 TWinControl.DefaultHandler
0052880c +084 cMUD.exe     Forms           3770   +7 TCustomForm.DefaultHandler
005065b1 +015 cMUD.exe     Controls        4812   +1 TControl.WMMouseMove
00505f8b +1df cMUD.exe     Controls        4645  +53 TControl.WndProc
00509cba +18e cMUD.exe     Controls        6342  +33 TWinControl.WndProc
00526d98 +478 cMUD.exe     Forms           3098 +103 TCustomForm.WndProc
00bfc094 +020 cMUD.exe     DXSounds        2013   +9 TCustomDXSound.FormWndProc
00bf97f0 +00c cMUD.exe     DXClass          572   +1 TControlSubClass.WndProc
0050988c +034 cMUD.exe     Controls        6237   +3 TWinControl.MainWndProc
0047fef0 +014 cMUD.exe     Classes        10966   +8 StdWndProc
77d3e361 +016 USER32.dll                             CallWindowProcA
006d5e8f +0a7 cMUD.exe     aqDockingUtils  1728   +7 CallDefWndProc
006d5f7d +0dd cMUD.exe     aqDockingUtils  1776  +41 TaqWindowEventFilter.WndProc
0047fef0 +014 cMUD.exe     Classes        10966   +8 StdWndProc
77d3bcc7 +00a USER32.dll                             DispatchMessageA
0052ee40 +0ac cMUD.exe     Forms           6873  +13 TApplication.ProcessMessage
0052ee87 +00f cMUD.exe     Forms           6892   +1 TApplication.HandleMessage
0052f122 +0a6 cMUD.exe     Forms           6976  +16 TApplication.Run
00db9538 +088 cMUD.exe     CMUD             344  +18 initialization
7c91312f +069 ntdll.dll                              RtlUnicodeStringToAnsiString
7c812907 +0b6 kernel32.dll                           GetVersionExA


I can easily reproduce this crash, but unable to do it in a new session: all ends on the crash described in my first post in this thread. So I'm quite confident that nobody will be able to reproduce it.
My primary package alone works perfectly in 2.06. The bug from my first post can be easily reproduced. But in conjunction behavior of these 2 packages is strange. BTW, while I tried to reproduce this crash several times (always successfully), I've run into several other crashes (all of them occurred upon "Close session" or "Close all" commands), including

Code:

exception class   : EAccessViolation
exception message : Access violation at address 007169BB in module 'cMUD.exe'. Read of address 0000022C.

Main ($c4c):
007169bb +013 cMUD.exe     aqDockingBase   5104     +1 TaqCustomDockingControl.SetVisible
00c5c5b4 +020 cMUD.exe     PARENT             1 +-9392 TParentForm.AutoMapper1Click
00c53eb0 +164 cMUD.exe     PARENT          3800    +24 TParentForm.InitMudWindow
00c54539 +479 cMUD.exe     PARENT          3926    +63 TParentForm.NewMUD
00c50782 +01a cMUD.exe     PARENT          2600     +2 MUDWindow
00c5083b +08f cMUD.exe     PARENT          2618    +14 TParentForm.CharAction
00c508e5 +005 cMUD.exe     PARENT          2642     +0 TParentForm.DoAction
00505f8b +1df cMUD.exe     Controls        4645    +53 TControl.WndProc
00509cba +18e cMUD.exe     Controls        6342    +33 TWinControl.WndProc
00526d98 +478 cMUD.exe     Forms           3098   +103 TCustomForm.WndProc
00505c96 +036 cMUD.exe     Controls        4552     +5 TControl.Perform
00bfc094 +020 cMUD.exe     DXSounds        2013     +9 TCustomDXSound.FormWndProc
00bf97f0 +00c cMUD.exe     DXClass          572     +1 TControlSubClass.WndProc
0050988c +034 cMUD.exe     Controls        6237     +3 TWinControl.MainWndProc
...


Code:

exception class   : EInvalidPointer
exception message : Invalid pointer operation.

Main ($dec):
0040307f +013 cMUD.exe     System                    @FreeMem
00404b98 +00c cMUD.exe     System                    TObject.FreeInstance
00404fa2 +002 cMUD.exe     System                    @ClassDestroy
00485cf6 +02a cMUD.exe     Graphics        1480   +1 TFont.Destroy
00404be0 +008 cMUD.exe     System                    TObject.Free
00486b5a +02e cMUD.exe     Graphics        2021   +3 TCanvas.Destroy
0050263a +022 cMUD.exe     Controls        2984   +2 TControlCanvas.Destroy
00404be0 +008 cMUD.exe     System                    TObject.Free
00525b1e +082 cMUD.exe     Forms           2635   +7 TCustomForm.Destroy
0055a11e +012 cMUD.exe     CustomForm        62   +1 TzCustomForm.Destroy
00779aa5 +019 cMUD.exe     International     47   +2 TInterForm.Destroy
0077a5ae +012 cMUD.exe     zsForm            47   +1 TzForm.Destroy
00a21ece +012 cMUD.exe     MultiForm        330   +3 TMultForm.Destroy
00404be0 +008 cMUD.exe     System                    TObject.Free
00a21601 +031 cMUD.exe     MultiForm         69   +5 CloseFree
00c5721a +0de cMUD.exe     PARENT          5584  +34 TParentForm.FormClose
00526449 +029 cMUD.exe     Forms           2845   +1 TCustomForm.DoClose
00a21b15 +005 cMUD.exe     MultiForm        209   +1 TMultForm.DoClose
00c56f36 +006 cMUD.exe     PARENT          5515   +1 TParentForm.DoClose
006a79dd +0a1 cMUD.exe     te_form         3428  +22 TTeDefaultForm.Close
006a6927 +18b cMUD.exe     te_form         2955  +45 TTeDefaultForm.NCMouseUp
006a903f +093 cMUD.exe     te_form         4256  +10 TTeDefaultForm.WMLButtonUp
006b1e3a +02a cMUD.exe     te_hook          399   +3 TTeHook.DoBeforeMessage
006aba85 +011 cMUD.exe     te_form         5939   +8 TTeDefaultForm.DoBeforeMessage
006b174c +08c cMUD.exe     te_hook          171   +7 TControlHook.NotifyHooks
006b19ba +032 cMUD.exe     te_hook          236   +3 TControlHook.HookWndProc
...
Reply with quote
Zugg
MASTER


Joined: 25 Sep 2000
Posts: 23379
Location: Colorado, USA

PostPosted: Tue Oct 16, 2007 8:09 pm   
 
I think part of the problem with that is that both sessions use the Mapper window, and currently the mapper window only works in a single session. So I think it gets confused about which session "owns" the single mapper window.

It's also possible that the XLY layout file for one or both sessions is messed up. Have you tried opening them but holding down the Shift key when you click the Open Offline to ensure that no XLY file is loaded?

When you open a second session, CMUD turns off the AutoSave option for the XLY layout. But if you ever some how force it to save the layout when multiple sessions are open (like using the #SAVE command), then the layout will contain all of the windows for both sessions. And when this XLY file is loaded in the future when all of those windows don't exist (like you open it first before the 2nd session is opened), then the docking system has trouble because the XLY file refers to windows that don't exist yet. I do some tricks to try and stop this from happening and causing trouble, but the docking system can be pretty finicky (and yet still works 100% better than most other systems I have tried).
Reply with quote
Arde
Enchanter


Joined: 09 Sep 2007
Posts: 605

PostPosted: Tue Oct 16, 2007 8:31 pm   
 
Zugg wrote:
It's also possible that the XLY layout file for one or both sessions is messed up. Have you tried opening them but holding down the Shift key when you click the Open Offline to ensure that no XLY file is loaded?

When you open a second session, CMUD turns off the AutoSave option for the XLY layout.


No, I have not tried that (even not knew about it). Just tried to load 2 sessions with Shift key pressed - yes, it shows now session tabs. But on "Close all" I've got an access violation crash. And if load second session without Shift key pressed, CMUD does not turn off AutoSave layout option. I've check it twice.
Reply with quote
Zugg
MASTER


Joined: 25 Sep 2000
Posts: 23379
Location: Colorado, USA

PostPosted: Tue Oct 16, 2007 10:06 pm   
 
Yeah, I think I just reproduced this myself. Looks like there is a problem when you change how windows are docked while the mapper is open. It saves the layout just fine, but then crashes when closing. So I'm working on that one. I'll also look at the AutoSave, although I think it's just disabling autosave internally and not actually changing the UI option (so that you can't accidentally turn if back on). In other words, I think it is supposed to just ignore your autosave setting when you open more than one session.
Reply with quote
Zugg
MASTER


Joined: 25 Sep 2000
Posts: 23379
Location: Colorado, USA

PostPosted: Tue Oct 16, 2007 10:16 pm   
 
Wow, this was nasty. If you drag any child window and change it's docking position, then when the docking system recreates the mapper panel, the mapper gets assigned to this child window. So not only is the mapper assigned to the wrong window now (won't speedwalk properly...sends the mapper descriptions to the child window, etc) then also when you close CMUD, it tries to close the mapper twice (once for the main window, and once for the child window, which are both pointing to the same mapper window). This causes the crash. But as you can see, the real problems were much worse than the crash on exit and explains several other bugs that have been reported.
Reply with quote
Display posts from previous:   
Post new topic   Reply to topic     Home » Forums » CMUD Beta Forum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

© 2009 Zugg Software. Hosted by Wolfpaw.net