Fix for crash on reset:

https://sourceforge.net/p/flightgear/codetickets/2217/

Ensure that subsystem lookup during its own removal, returns nullptr.
Otherwise we cache an about-to-be dead pointer, which is Bad (TM)
This commit is contained in:
James Turner 2020-04-22 10:55:41 +01:00
parent 17d7808200
commit 5c52cdc255

View File

@ -647,6 +647,14 @@ SGSubsystemGroup::remove_subsystem(const string &name)
// found it, great // found it, great
const auto sub = (*it)->subsystem; const auto sub = (*it)->subsystem;
// ensure we clear the name during shutdown. This ensures that
// a lookup during shutdown fails, which is the desired behaviour.
// for an example see: https://sourceforge.net/p/flightgear/codetickets/2217/
// where we looked up Nasal during Nasal shutdown
// without this, the SubsystemMgr re-caches a dead pointer
// after doing its clear()
(*it)->name.clear();
if (_state != State::INVALID) { if (_state != State::INVALID) {
// transition out correctly // transition out correctly
if ((_state >= State::INIT) && (_state < State::SHUTDOWN)) { if ((_state >= State::INIT) && (_state < State::SHUTDOWN)) {