|
Arde Enchanter
Joined: 09 Sep 2007 Posts: 605
|
Posted: 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
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. |
|
|
|
Arde Enchanter
Joined: 09 Sep 2007 Posts: 605
|
Posted: 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
...
|
|
|
|
|
Zugg MASTER
Joined: 25 Sep 2000 Posts: 23379 Location: Colorado, USA
|
Posted: 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). |
|
|
|
Arde Enchanter
Joined: 09 Sep 2007 Posts: 605
|
Posted: 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. |
|
|
|
Zugg MASTER
Joined: 25 Sep 2000 Posts: 23379 Location: Colorado, USA
|
Posted: 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.
|
|
|
|
Zugg MASTER
Joined: 25 Sep 2000 Posts: 23379 Location: Colorado, USA
|
Posted: 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.
|
|
|
|
|
|
|
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
|
|