diff --git a/src/Main/ErrorReporter.cxx b/src/Main/ErrorReporter.cxx index 92fded6c0..d91e7cda2 100644 --- a/src/Main/ErrorReporter.cxx +++ b/src/Main/ErrorReporter.cxx @@ -768,8 +768,10 @@ void ErrorReporter::init() SG_LOG(SG_GENERAL, SG_INFO, "Error reporting disabled"); simgear::setFailureCallback(simgear::FailureCallback()); simgear::setErrorContextCallback(simgear::ContextCallback()); - sglog().removeCallback(d->_logCallback.get()); - d->_logCallbackRegistered = false; + if (d->_logCallbackRegistered) { + sglog().removeCallback(d->_logCallback.get()); + d->_logCallbackRegistered = false; + } return; } @@ -885,8 +887,14 @@ void ErrorReporter::shutdown() globals->get_commands()->removeCommand("dismiss-error-report"); globals->get_commands()->removeCommand("save-error-report-data"); globals->get_commands()->removeCommand("show-error-report"); - sglog().removeCallback(d->_logCallback.get()); - d->_logCallbackRegistered = false; + +// during a reset we don't want to touch the log callback; it was added in +// preinit, which does not get repeated on a reset + const bool inReset = fgGetBool("/sim/signals/reinit", false); + if (!inReset) { + sglog().removeCallback(d->_logCallback.get()); + d->_logCallbackRegistered = false; + } } } diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index 6e28d73f0..166af7730 100755 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -155,6 +155,7 @@ #include "util.hxx" #include "AircraftDirVisitorBase.hxx" #include
+#include
#if defined(SG_MAC) #include // for Mac impl of platformDefaultDataPath() @@ -1235,7 +1236,10 @@ void fgStartNewReset() SGSubsystemGroup* grp = subsystemManger->get_group(static_cast(g)); for (auto nm : grp->member_names()) { if ((nm == "time") || (nm == "terrasync") || (nm == "events") - || (nm == "lighting") || (nm == FGScenery::staticSubsystemClassId())) + || (nm == "lighting") + || (nm == FGScenery::staticSubsystemClassId()) + || (nm == flightgear::ErrorReporter::staticSubsystemClassId()) + ) { continue; }