From: torsten Date: Fri, 4 Sep 2009 05:42:58 +0000 (+0000) Subject: Tatsuhiro Nishioka: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=e98d7a1ea47aaa36a9cdd1fb4001f8e39842dcac;p=flightgear.git Tatsuhiro Nishioka: FG crashes at exit at very high likelihood. The cause of the crash is that some subsystems (input and gui) call get_subsystems() at their destructor. This is very dangerous since SGSubSystemMgr::get_subsystem() can refer to already deleted subsystems. --- diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index b73056476..2d00791a2 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -121,6 +121,13 @@ FGGlobals::~FGGlobals() // shut down all subsystems, make sure we take down the // AIModels system first. subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model"); + // FGInput (FGInputEvent) and FGDialog calls get_subsystem() in their destructors, + // which is not safe since some subsystem are already deleted but can be referred. + // So these subsystems must be deleted prior to deleting subsystem_mgr unless + // ~SGSubsystemGroup and SGSubsystemMgr::get_subsystem are changed not to refer to + // deleted subsystems. + subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("input"); + subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("gui"); delete subsystem_mgr; delete event_mgr; delete time_params;