Opened 13 months ago
Closed 13 months ago
#15794 closed defect (fixed)
SCUMM: Monkey1-SegaCD crash in IMuseDriver_GMidi::trackMidiState() when quitting the game
| Reported by: | dwatteau | Owned by: | athrxx |
|---|---|---|---|
| Priority: | normal | Component: | Engine: SCUMM |
| Version: | Keywords: | segacd | |
| Cc: | Game: | Monkey Island 1 |
Description
This is on today's Git HEAD.
How to reproduce:
- Have
gui_return_to_launcher_at_exit=truein ScummVM settings - Start a new Monkey1-SegaCD (English) game
- Go to Voodoo Lady's shop
- Click on the Quit button of the ScummVM window, to go back to the launcher
This crash then happens:
User picked target 'monkey-sega' (engine ID 'scumm', game ID 'monkey')...
Process 6698 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x50)
frame #0: 0x00000001000e4671 scummvm`Scumm::IMuseDriver_GMidi::trackMidiState(this=0x000060000292ca10, b=0) at midi.cpp:680:7
677 }
678 // fall through
679 case 1: // Program change
-> 680 if (*var == (b & 0xFF))
681 return false;
682 else
683 *var = b & 0xFF;
Target 0: (scummvm) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x50)
* frame #0: 0x00000001000e4671 scummvm`Scumm::IMuseDriver_GMidi::trackMidiState(this=0x000060000292ca10, b=0) at midi.cpp:680:7
frame #1: 0x00000001000e57ce scummvm`Scumm::IMuseDriver_GMidi::send(this=0x000060000292ca10, b=16560) at midi.h:49:45
frame #2: 0x00000001000e4518 scummvm`Scumm::IMuseDriver_GMidi::deinitDevice(this=0x000060000292ca10) at midi.cpp:642:3
frame #3: 0x00000001000e3dd3 scummvm`Scumm::IMuseDriver_GMidi::close(this=0x000060000292ca10) at midi.cpp:419:3
frame #4: 0x00000001000e3828 scummvm`Scumm::IMuseDriver_GMidi::~IMuseDriver_GMidi(this=0x000060000292ca10) at midi.cpp:395:2
frame #5: 0x00000001000e3875 scummvm`Scumm::IMuseDriver_GMidi::~IMuseDriver_GMidi(this=0x000060000292ca10) at midi.cpp:394:41
frame #6: 0x00000001000e3899 scummvm`Scumm::IMuseDriver_GMidi::~IMuseDriver_GMidi(this=0x000060000292ca10) at midi.cpp:394:41
frame #7: 0x00000001000cdb92 scummvm`Scumm::IMuseInternal::~IMuseInternal(this=0x0000000102138200) at imuse.cpp:99:3
frame #8: 0x00000001000cddb5 scummvm`Scumm::IMuseInternal::~IMuseInternal(this=0x0000000102138200) at imuse.cpp:80:33
frame #9: 0x00000001000cddd9 scummvm`Scumm::IMuseInternal::~IMuseInternal(this=0x0000000102138200) at imuse.cpp:80:33
frame #10: 0x00000001001d94a9 scummvm`Scumm::ScummEngine::~ScummEngine(this=0x0000000110170000) at scumm.cpp:457:2
frame #11: 0x000000010006cfa5 scummvm`Scumm::ScummEngine_v5::~ScummEngine_v5(this=0x0000000110170000) at scumm_v5.h:29:7
frame #12: 0x000000010006cc65 scummvm`Scumm::ScummEngine_v5::~ScummEngine_v5(this=0x0000000110170000) at scumm_v5.h:29:7
frame #13: 0x000000010006cc89 scummvm`Scumm::ScummEngine_v5::~ScummEngine_v5(this=0x0000000110170000) at scumm_v5.h:29:7
frame #14: 0x0000000100288ee4 scummvm`MetaEngine::deleteInstance(this=0x0000600000010170, engine=0x0000000110170000, gameDescriptor=0x00007ff7bfefd690, meDescriptor=0x0000000000000000) at metaengine.cpp:348:2
frame #15: 0x000000010001c6db scummvm`runGame(enginePlugin=0x0000600000224480, system=0x0000000101404080, game=0x00007ff7bfefd690, meDescriptor=0x0000000000000000) at main.cpp:324:13
frame #16: 0x000000010001a3c0 scummvm`scummvm_main(argc=1, argv=0x00007ff7bfeff738) at main.cpp:796:13
frame #17: 0x000000010001342a scummvm`main(argc=1, argv=0x00007ff7bfeff738) at macosx-main.cpp:44:12
frame #18: 0x00007ff813f96418 dyld`start + 1896
(ScummVM config file attached below)
This is a recent regression; a Git bisect points me to commit adb52bcebed27bb8f9512090e12f9de4515da223 ("SCUMM: (IMS/MIDI) - add midi message tracking").
Attachments (1)
Change History (3)
by , 13 months ago
| Attachment: | minimal-scummvm.ini added |
|---|
comment:1 by , 13 months ago
Thanks, I have made a fix. This was just a wrong order of things in the driver's destruction process (deleting a buffer that still got used).
The other interesting point that comes to mind is why the engine even creates a midi driver for the SegaCD version. It feels like nonsense, but maybe it is needed. I'll take a look at that if I don't forget...
comment:2 by , 13 months ago
| Owner: | set to |
|---|---|
| Resolution: | → fixed |
| Status: | new → closed |
Thanks, closing this, since both issues were fixed by commits 18d6b3a6c7815015c019699be2b84e0b5958f03c and 969419c2f68c6622a11d40f09e154c2f66033e54.

Minimal ScummVM configuration file to reproduce the issue