From e031ea7f7cf96b2e6b5097223b20f3e54218fa4f Mon Sep 17 00:00:00 2001 From: Scott Giese Date: Thu, 17 Dec 2020 17:02:40 -0600 Subject: [PATCH] Crash prevention: throw during dtor get_manager() will be called during dtor, so throwing an exception would cause a hard crash. --- simgear/structure/subsystem_mgr.cxx | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/simgear/structure/subsystem_mgr.cxx b/simgear/structure/subsystem_mgr.cxx index 196131a7..283a1365 100644 --- a/simgear/structure/subsystem_mgr.cxx +++ b/simgear/structure/subsystem_mgr.cxx @@ -175,9 +175,10 @@ SGSubsystemGroup* SGSubsystem::get_group() const SGSubsystemMgr* SGSubsystem::get_manager() const { - if (!get_group()) - throw sg_exception("SGSubsystem::get_manager: subsystem " + subsystemId() + " has no group"); - return get_group()->get_manager(); + if (auto group = get_group(); group) + return group->get_manager(); + + return nullptr; } std::string SGSubsystem::nameForState(State s) @@ -695,8 +696,7 @@ SGSubsystemGroup::remove_subsystem(const string &name) void SGSubsystemGroup::notifyWillChange(SGSubsystem* sub, SGSubsystemMgr::State s) { - auto manager = get_manager(); - if (manager) { + if (auto manager = get_manager(); manager) { manager->notifyDelegatesWillChange(sub, s); } } @@ -704,8 +704,7 @@ SGSubsystemGroup::notifyWillChange(SGSubsystem* sub, SGSubsystemMgr::State s) void SGSubsystemGroup::notifyDidChange(SGSubsystem* sub, SGSubsystemMgr::State s) { - auto manager = get_manager(); - if (manager) { + if (auto manager = get_manager(); manager) { manager->notifyDelegatesDidChange(sub, s); } } @@ -761,8 +760,7 @@ auto SGSubsystemGroup::get_member(const string &name, bool create) -> Member* SGSubsystemMgr* SGSubsystemGroup::get_manager() const { - auto parentGroup = get_group(); - if (parentGroup) { + if (auto parentGroup = get_group(); parentGroup) { return parentGroup->get_manager(); }