[Scummvm-tracker] [ScummVM :: Bugs] #13512: AGS: Segfault on quitting a game

ScummVM :: Bugs trac at scummvm.org
Sat May 28 06:44:07 UTC 2022


#13512: AGS: Segfault on quitting a game
-------------------------+-------------------------
Reporter:  eriktorbjorn  |      Owner:  (none)
    Type:  defect        |     Status:  new
Priority:  normal        |  Component:  Engine: AGS
 Version:                |   Keywords:
    Game:                |
-------------------------+-------------------------
 The current development version of ScummVM segfaults when I quit an AGS
 game. Unfortunately I don't know enough about it to fix it on my own. This
 is what I see in Valgrind with 5 Day A Stranger when pressinng Quit on its
 main menu:

 {{{
 ==232807== Invalid write of size 4
 ==232807==    at 0xDC39AC: AGS3::ScriptViewport::Invalidate()
 (script_viewport.h:42)
 ==232807==    by 0xDC35C0: AGS3::GameState::FreeViewportsAndCameras()
 (game_state.cpp:822)
 ==232807==    by 0xDB61E2: AGS3::unload_game_file() (game.cpp:362)
 ==232807==    by 0xE77B21: AGS3::quit_release_data() (quit.cpp:153)
 ==232807==    by 0xE77D39: AGS3::quit_free() (quit.cpp:230)
 ==232807==    by 0xCDA4E7: AGS::AGSEngine::run() (ags.cpp:192)
 ==232807==    by 0x988466: runGame(Plugin const*, Plugin const*, OSystem&,
 Common::String const&) (main.cpp:318)
 ==232807==    by 0x989D16: scummvm_main (main.cpp:626)
 ==232807==    by 0x98586C: main (posix-main.cpp:44)
 ==232807==  Address 0xb7d7b68 is 8 bytes inside a block of size 16 free'd
 ==232807==    at 0x74B371B: operator delete(void*) (in
 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
 ==232807==    by 0xE3BB7D: AGS3::ScriptViewport::~ScriptViewport()
 (script_viewport.h:30)
 ==232807==    by 0xE3BA03: AGS3::ScriptViewport::Dispose(char const*,
 bool) (script_viewport.cpp:42)
 ==232807==    by 0xE3723D:
 AGS3::ManagedObjectPool::Remove(AGS3::ManagedObjectPool::ManagedObject&,
 bool) (managed_object_pool.cpp:46)
 ==232807==    by 0xE3856A: AGS3::ManagedObjectPool::reset()
 (managed_object_pool.cpp:364)
 ==232807==    by 0xE3616A: AGS3::ccUnregisterAllObjects()
 (cc_dynamic_object.cpp:76)
 ==232807==    by 0xE7771A: AGS3::quit_shutdown_scripts() (quit.cpp:76)
 ==232807==    by 0xE77C78: AGS3::quit_free() (quit.cpp:204)
 ==232807==    by 0xCDA4E7: AGS::AGSEngine::run() (ags.cpp:192)
 ==232807==    by 0x988466: runGame(Plugin const*, Plugin const*, OSystem&,
 Common::String const&) (main.cpp:318)
 ==232807==    by 0x989D16: scummvm_main (main.cpp:626)
 ==232807==    by 0x98586C: main (posix-main.cpp:44)
 ==232807==  Block was alloc'd at
 ==232807==    at 0x74B0F2F: operator new(unsigned long) (in
 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
 ==232807==    by 0xDBF60A: AGS3::GameState::CreateRoomViewport()
 (game_state.cpp:245)
 ==232807==    by 0xDBF3F0:
 AGS3::GameState::CreatePrimaryViewportAndCamera() (game_state.cpp:229)
 ==232807==    by 0xE429F4:
 AGS3::AGS::Engine::InitAndRegisterGameEntities(AGS3::GameSetupStruct&)
 (game_init.cpp:250)
 ==232807==    by 0xE436DD:
 AGS3::AGS::Engine::InitGameState(AGS3::AGS::Shared::LoadedGameEntities
 const&, AGS3::GameDataVersion) (game_init.cpp:383)
 ==232807==    by 0xE6FDC0: AGS3::load_game_file() (game_file.cpp:197)
 ==232807==    by 0xE68EFC: AGS3::engine_load_game_data() (engine.cpp:378)
 ==232807==    by 0xE6D8CC:
 AGS3::initialize_engine(AGS3::std::map<AGS3::AGS::Shared::String,
 AGS3::std::map<AGS3::AGS::Shared::String, AGS3::AGS::Shared::String,
 Common::Less<AGS3::AGS::Shared::String> >,
 Common::Less<AGS3::AGS::Shared::String> > const&) (engine.cpp:1147)
 ==232807==    by 0xCDA4E2: AGS::AGSEngine::run() (ags.cpp:189)
 ==232807==    by 0x988466: runGame(Plugin const*, Plugin const*, OSystem&,
 Common::String const&) (main.cpp:318)
 ==232807==    by 0x989D16: scummvm_main (main.cpp:626)
 ==232807==    by 0x98586C: main (posix-main.cpp:44)
 ==232807==
 ==232807== Invalid write of size 4
 ==232807==    at 0xDC397E: AGS3::ScriptCamera::Invalidate()
 (script_camera.h:43)
 ==232807==    by 0xDC3648: AGS3::GameState::FreeViewportsAndCameras()
 (game_state.cpp:828)
 ==232807==    by 0xDB61E2: AGS3::unload_game_file() (game.cpp:362)
 ==232807==    by 0xE77B21: AGS3::quit_release_data() (quit.cpp:153)
 ==232807==    by 0xE77D39: AGS3::quit_free() (quit.cpp:230)
 ==232807==    by 0xCDA4E7: AGS::AGSEngine::run() (ags.cpp:192)
 ==232807==    by 0x988466: runGame(Plugin const*, Plugin const*, OSystem&,
 Common::String const&) (main.cpp:318)
 ==232807==    by 0x989D16: scummvm_main (main.cpp:626)
 ==232807==    by 0x98586C: main (posix-main.cpp:44)
 ==232807==  Address 0xb80c998 is 8 bytes inside a block of size 16 free'd
 ==232807==    at 0x74B371B: operator delete(void*) (in
 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
 ==232807==    by 0xE39D1D: AGS3::ScriptCamera::~ScriptCamera()
 (script_camera.h:30)
 ==232807==    by 0xE39BA3: AGS3::ScriptCamera::Dispose(char const*, bool)
 (script_camera.cpp:42)
 ==232807==    by 0xE3723D:
 AGS3::ManagedObjectPool::Remove(AGS3::ManagedObjectPool::ManagedObject&,
 bool) (managed_object_pool.cpp:46)
 ==232807==    by 0xE3856A: AGS3::ManagedObjectPool::reset()
 (managed_object_pool.cpp:364)
 ==232807==    by 0xE3616A: AGS3::ccUnregisterAllObjects()
 (cc_dynamic_object.cpp:76)
 ==232807==    by 0xE7771A: AGS3::quit_shutdown_scripts() (quit.cpp:76)
 ==232807==    by 0xE77C78: AGS3::quit_free() (quit.cpp:204)
 ==232807==    by 0xCDA4E7: AGS::AGSEngine::run() (ags.cpp:192)
 ==232807==    by 0x988466: runGame(Plugin const*, Plugin const*, OSystem&,
 Common::String const&) (main.cpp:318)
 ==232807==    by 0x989D16: scummvm_main (main.cpp:626)
 ==232807==    by 0x98586C: main (posix-main.cpp:44)
 ==232807==  Block was alloc'd at
 ==232807==    at 0x74B0F2F: operator new(unsigned long) (in
 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
 ==232807==    by 0xDBFB33: AGS3::GameState::CreateRoomCamera()
 (game_state.cpp:303)
 ==232807==    by 0xDBF454:
 AGS3::GameState::CreatePrimaryViewportAndCamera() (game_state.cpp:233)
 ==232807==    by 0xE429F4:
 AGS3::AGS::Engine::InitAndRegisterGameEntities(AGS3::GameSetupStruct&)
 (game_init.cpp:250)
 ==232807==    by 0xE436DD:
 AGS3::AGS::Engine::InitGameState(AGS3::AGS::Shared::LoadedGameEntities
 const&, AGS3::GameDataVersion) (game_init.cpp:383)
 ==232807==    by 0xE6FDC0: AGS3::load_game_file() (game_file.cpp:197)
 ==232807==    by 0xE68EFC: AGS3::engine_load_game_data() (engine.cpp:378)
 ==232807==    by 0xE6D8CC:
 AGS3::initialize_engine(AGS3::std::map<AGS3::AGS::Shared::String,
 AGS3::std::map<AGS3::AGS::Shared::String, AGS3::AGS::Shared::String,
 Common::Less<AGS3::AGS::Shared::String> >,
 Common::Less<AGS3::AGS::Shared::String> > const&) (engine.cpp:1147)
 ==232807==    by 0xCDA4E2: AGS::AGSEngine::run() (ags.cpp:189)
 ==232807==    by 0x988466: runGame(Plugin const*, Plugin const*, OSystem&,
 Common::String const&) (main.cpp:318)
 ==232807==    by 0x989D16: scummvm_main (main.cpp:626)
 ==232807==    by 0x98586C: main (posix-main.cpp:44)
 ==232807==
 WARNING: movement control not supported, mouse control can't be enabled!
 ***** ENGINE HAS SHUTDOWN
 ==232807== Mismatched free() / delete / delete []
 ==232807==    at 0x74B371B: operator delete(void*) (in
 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
 ==232807==    by 0xD3D412: Common::BasePtrTrackerImpl<unsigned
 char>::destructObject() (ptr.h:94)
 ==232807==    by 0x96604B: Common::BasePtrTrackerInternal::decStrong()
 (ptr.h:65)
 ==232807==    by 0xCEDC48: Common::SharedPtr<unsigned char>::~SharedPtr()
 (ptr.h:178)
 ==232807==    by 0xCEBB1E: AGS3::std::vector<Common::SharedPtr<unsigned
 char> >::freeStorage(Common::SharedPtr<unsigned char>*, unsigned int)
 (vector.h:556)
 ==232807==    by 0xCE7805: AGS3::std::vector<Common::SharedPtr<unsigned
 char> >::~vector() (vector.h:185)
 ==232807==    by 0xCE3228: AGS3::Globals::~Globals() (globals.cpp:617)
 ==232807==    by 0xCD9E27: AGS::AGSEngine::~AGSEngine() (ags.cpp:101)
 ==232807==    by 0xCD9E93: AGS::AGSEngine::~AGSEngine() (ags.cpp:102)
 ==232807==    by 0x98854C: runGame(Plugin const*, Plugin const*, OSystem&,
 Common::String const&) (main.cpp:331)
 ==232807==    by 0x989D16: scummvm_main (main.cpp:626)
 ==232807==    by 0x98586C: main (posix-main.cpp:44)
 ==232807==  Address 0xb7db810 is 0 bytes inside a block of size 245
 alloc'd
 ==232807==    at 0x74B220F: operator new[](unsigned long) (in
 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
 ==232807==    by 0xD376F2:
 AGS3::AGS::Shared::ReadDialogs(AGS3::DialogTopic*&,
 AGS3::std::vector<Common::SharedPtr<unsigned char> >&,
 AGS3::std::vector<AGS3::AGS::Shared::String>&,
 AGS3::std::vector<AGS3::AGS::Shared::String>&, AGS3::AGS::Shared::Stream*,
 AGS3::GameDataVersion, int) (main_game_file.cpp:288)
 ==232807==    by 0xD39AC7:
 AGS3::AGS::Shared::ReadGameData(AGS3::AGS::Shared::LoadedGameEntities&,
 AGS3::AGS::Shared::Stream*, AGS3::GameDataVersion)
 (main_game_file.cpp:802)
 ==232807==    by 0xE6FB3A: AGS3::load_game_file() (game_file.cpp:175)
 ==232807==    by 0xE68EFC: AGS3::engine_load_game_data() (engine.cpp:378)
 ==232807==    by 0xE6D8CC:
 AGS3::initialize_engine(AGS3::std::map<AGS3::AGS::Shared::String,
 AGS3::std::map<AGS3::AGS::Shared::String, AGS3::AGS::Shared::String,
 Common::Less<AGS3::AGS::Shared::String> >,
 Common::Less<AGS3::AGS::Shared::String> > const&) (engine.cpp:1147)
 ==232807==    by 0xCDA4E2: AGS::AGSEngine::run() (ags.cpp:189)
 ==232807==    by 0x988466: runGame(Plugin const*, Plugin const*, OSystem&,
 Common::String const&) (main.cpp:318)
 ==232807==    by 0x989D16: scummvm_main (main.cpp:626)
 ==232807==    by 0x98586C: main (posix-main.cpp:44)
 =
 }}}
-- 
Ticket URL: <https://bugs.scummvm.org/ticket/13512>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM


More information about the Scummvm-tracker mailing list