Opened 5 years ago
Closed 5 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 , 5 years ago
| Attachment: | neverhood-demo.002 added |
|---|
comment:1 by , 5 years ago
comment:2 by , 5 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 , 5 years ago
| Summary: | NEVERHOOD: Demo can crash when pressing Esc → NEVERHOOD: Game can crash on exit (both demo and full game) |
|---|
comment:4 by , 5 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 , 5 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 , 5 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.