mirror of
https://github.com/overte-org/overte.git
synced 2025-07-23 13:24:02 +02:00
Merge pull request #14485 from sethalves/crash-on-exits
suppress 'No instance available' messages during shutdown. try a dif…
This commit is contained in:
commit
0bca290de2
3 changed files with 17 additions and 2 deletions
|
@ -2572,6 +2572,8 @@ void Application::cleanupBeforeQuit() {
|
||||||
QString webengineRemoteDebugging = QProcessEnvironment::systemEnvironment().value("QTWEBENGINE_REMOTE_DEBUGGING", "false");
|
QString webengineRemoteDebugging = QProcessEnvironment::systemEnvironment().value("QTWEBENGINE_REMOTE_DEBUGGING", "false");
|
||||||
qCDebug(interfaceapp) << "QTWEBENGINE_REMOTE_DEBUGGING =" << webengineRemoteDebugging;
|
qCDebug(interfaceapp) << "QTWEBENGINE_REMOTE_DEBUGGING =" << webengineRemoteDebugging;
|
||||||
|
|
||||||
|
DependencyManager::prepareToExit();
|
||||||
|
|
||||||
if (tracing::enabled()) {
|
if (tracing::enabled()) {
|
||||||
auto tracer = DependencyManager::get<tracing::Tracer>();
|
auto tracer = DependencyManager::get<tracing::Tracer>();
|
||||||
tracer->stopTracing();
|
tracer->stopTracing();
|
||||||
|
@ -2684,6 +2686,7 @@ void Application::cleanupBeforeQuit() {
|
||||||
|
|
||||||
// destroy Audio so it and its threads have a chance to go down safely
|
// destroy Audio so it and its threads have a chance to go down safely
|
||||||
// this must happen after QML, as there are unexplained audio crashes originating in qtwebengine
|
// this must happen after QML, as there are unexplained audio crashes originating in qtwebengine
|
||||||
|
QMetaObject::invokeMethod(DependencyManager::get<AudioClient>().data(), "stop");
|
||||||
DependencyManager::destroy<AudioClient>();
|
DependencyManager::destroy<AudioClient>();
|
||||||
DependencyManager::destroy<AudioInjectorManager>();
|
DependencyManager::destroy<AudioInjectorManager>();
|
||||||
DependencyManager::destroy<AudioScriptingInterface>();
|
DependencyManager::destroy<AudioScriptingInterface>();
|
||||||
|
@ -2775,7 +2778,7 @@ Application::~Application() {
|
||||||
// quit the thread used by the closure event sender
|
// quit the thread used by the closure event sender
|
||||||
closeEventSender->thread()->quit();
|
closeEventSender->thread()->quit();
|
||||||
|
|
||||||
// Can't log to file passed this point, FileLogger about to be deleted
|
// Can't log to file past this point, FileLogger about to be deleted
|
||||||
qInstallMessageHandler(LogHandler::verboseMessageHandler);
|
qInstallMessageHandler(LogHandler::verboseMessageHandler);
|
||||||
|
|
||||||
_renderEventHandler->deleteLater();
|
_renderEventHandler->deleteLater();
|
||||||
|
|
|
@ -302,7 +302,6 @@ void AudioClient::customDeleter() {
|
||||||
#if defined(Q_OS_ANDROID)
|
#if defined(Q_OS_ANDROID)
|
||||||
_shouldRestartInputSetup = false;
|
_shouldRestartInputSetup = false;
|
||||||
#endif
|
#endif
|
||||||
stop();
|
|
||||||
deleteLater();
|
deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,9 @@ public:
|
||||||
#endif
|
#endif
|
||||||
return hashCode;
|
return hashCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void prepareToExit() { manager()._exiting = true; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static DependencyManager& manager();
|
static DependencyManager& manager();
|
||||||
|
|
||||||
|
@ -84,6 +87,8 @@ private:
|
||||||
|
|
||||||
QHash<size_t, QSharedPointer<Dependency>> _instanceHash;
|
QHash<size_t, QSharedPointer<Dependency>> _instanceHash;
|
||||||
QHash<size_t, size_t> _inheritanceHash;
|
QHash<size_t, size_t> _inheritanceHash;
|
||||||
|
|
||||||
|
bool _exiting { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -95,9 +100,17 @@ QSharedPointer<T> DependencyManager::get() {
|
||||||
instance = qSharedPointerCast<T>(manager().safeGet(hashCode));
|
instance = qSharedPointerCast<T>(manager().safeGet(hashCode));
|
||||||
|
|
||||||
#ifndef QT_NO_DEBUG
|
#ifndef QT_NO_DEBUG
|
||||||
|
// debug builds...
|
||||||
if (instance.isNull()) {
|
if (instance.isNull()) {
|
||||||
qWarning() << "DependencyManager::get(): No instance available for" << typeid(T).name();
|
qWarning() << "DependencyManager::get(): No instance available for" << typeid(T).name();
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// for non-debug builds, don't print "No instance available" during shutdown, because
|
||||||
|
// the act of printing this often causes crashes (because the LogHandler has-been/is-being
|
||||||
|
// deleted).
|
||||||
|
if (!manager()._exiting && instance.isNull()) {
|
||||||
|
qWarning() << "DependencyManager::get(): No instance available for" << typeid(T).name();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue