Opened 3 years ago
Closed 3 years ago
#12930 closed defect (fixed)
NEVERHOOD: Game can crash on exit (both demo and full game)
Reported by: | eriktorbjorn | Owned by: | eriktorbjorn |
---|---|---|---|
Priority: | normal | Component: | Engine: Neverhood |
Version: | Keywords: | ||
Cc: | Game: | The Neverhood |
Description
If I walk around outside near the monster cave in the big demo, pressing Esc causes the game to segfault. This is what the backtrace shows:
#0 0x00005555578fe585 in Neverhood::SoundItem::setPlayOnceAfterCountdown(bool) (this=0x0, playOnceAfterCountdown=false) at ./engines/neverhood/sound.h:110 #1 0x00005555578fca63 in Neverhood::SoundMan::setSoundThreePlayFlag(bool) (this=0x55555cbc33d0, playOnceAfterCountdown=false) at engines/neverhood/sound.cpp:490 #2 0x00005555579919ae in Neverhood::NavigationScene::~NavigationScene() (this=0x55555cca6920, __in_chrg=<optimized out>) at engines/neverhood/navigationscene.cpp:62 #3 0x00005555579919d6 in Neverhood::NavigationScene::~NavigationScene() (this=0x55555cca6920, __in_chrg=<optimized out>) at engines/neverhood/navigationscene.cpp:63 #4 0x0000555557916d6b in Neverhood::Module::~Module() (this=0x55555c7eae80, __in_chrg=<optimized out>) at engines/neverhood/module_scene.cpp:40 #5 0x000055555796e31c in Neverhood::Module2600::~Module2600() (this=0x55555c7eae80, __in_chrg=<optimized out>) at engines/neverhood/modules/module2600.cpp:53 #6 0x000055555796e338 in Neverhood::Module2600::~Module2600() (this=0x55555c7eae80, __in_chrg=<optimized out>) at engines/neverhood/modules/module2600.cpp:55 #7 0x000055555790c0e5 in Neverhood::GameModule::~GameModule() (this=0x55555c80d7b0, __in_chrg=<optimized out>) at engines/neverhood/gamemodule.cpp:88 #8 0x000055555790c11c in Neverhood::GameModule::~GameModule() (this=0x55555c80d7b0, __in_chrg=<optimized out>) at engines/neverhood/gamemodule.cpp:90 #9 0x00005555578f57d2 in Neverhood::NeverhoodEngine::run() (this= 0x55555cda32d0) at engines/neverhood/neverhood.cpp:135 #10 0x0000555555d64817 in runGame(Plugin const*, Plugin const*, OSystem&, Common::String const&) (plugin=0x55555bbe31f0, enginePlugin=0x55555ba56960, system=..., debugLevels=...) at base/main.cpp:311 #11 0x0000555555d66100 in scummvm_main(int, char const* const*) (argc=1, argv=0x7fffffffe678) at base/main.cpp:621 #12 0x0000555555d61d27 in main(int, char**) (argc=1, argv=0x7fffffffe678) at backends/platform/sdl/posix/posix-main.cpp:45
I'm guessing this is because in the demos, pressing Esc calls _vm->quitGame(). See GameModule::handleEscapeKey()
I'm guessing that the engine needs to be properly shut down.
Attachments (1)
Change History (7)
by , 3 years ago
Attachment: | neverhood-demo.002 added |
---|
comment:1 by , 3 years ago
comment:2 by , 3 years ago
It seems that when _gameModule is deleted, it will delete some sounds from the sound module.
Perhaps something like this would work? I'm not sure if it's the correct approach, though.
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp index db22b72289..eb55fde45c 100644 --- a/engines/neverhood/sound.cpp +++ b/engines/neverhood/sound.cpp @@ -421,6 +421,11 @@ void SoundMan::deleteSoundGroup(uint32 groupNameHash) { _soundIndex2 = -1; } + if (_soundIndex3 != -1 && _soundItems[_soundIndex3]->getGroupNameHash() == groupNameHash) { + deleteSoundByIndex(_soundIndex3); + _soundIndex3 = -1; + } + for (uint index = 0; index < _soundItems.size(); ++index) if (_soundItems[index] && _soundItems[index]->getGroupNameHash() == groupNameHash) deleteSoundByIndex(index);
It would be consistent with how it handles _soundIndex1 and _soundIndex2, but...
comment:3 by , 3 years ago
Summary: | NEVERHOOD: Demo can crash when pressing Esc → NEVERHOOD: Game can crash on exit (both demo and full game) |
---|
comment:4 by , 3 years ago
I can also reproduce the crash near the start of the game, in the first "navigation" scene. Maybe it happens in all of the first-person view scenes?
comment:5 by , 3 years ago
I have submitted my proposed fix as a pull request now: https://github.com/scummvm/scummvm/pull/3393
I still don't know if it's correct, but it makes sense to me.
comment:6 by , 3 years ago
Owner: | set to |
---|---|
Resolution: | → fixed |
Status: | new → closed |
Thanks for your work! The PR has been merged and backported
I can also get the full game to crash there, if I use the Ctrl+F5 menu to quit the game.