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.
This commit is contained in:
parent
8676c2bbd8
commit
e98d7a1ea4
1 changed files with 7 additions and 0 deletions
|
@ -121,6 +121,13 @@ FGGlobals::~FGGlobals()
|
||||||
// shut down all subsystems, make sure we take down the
|
// shut down all subsystems, make sure we take down the
|
||||||
// AIModels system first.
|
// AIModels system first.
|
||||||
subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model");
|
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 subsystem_mgr;
|
||||||
delete event_mgr;
|
delete event_mgr;
|
||||||
delete time_params;
|
delete time_params;
|
||||||
|
|
Loading…
Add table
Reference in a new issue