From 4a2d23c14089cb98901e3df535037f7d8095e9a7 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 4 Jan 2018 09:23:06 +0100 Subject: main: workaround crash on exit without terminating process --- api/plugin-support.hpp | 2 +- gui/main.cpp | 3 ++- proto-fsuipc/ftnoir_protocol_fsuipc.cpp | 1 + proto-simconnect/ftnoir_protocol_sc.cpp | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/api/plugin-support.hpp b/api/plugin-support.hpp index acba925c..85b8653c 100644 --- a/api/plugin-support.hpp +++ b/api/plugin-support.hpp @@ -62,7 +62,7 @@ struct dylib final return; handle.setFileName(filename_); - handle.setLoadHints(QLibrary::DeepBindHint | QLibrary::ResolveAllSymbolsHint); + handle.setLoadHints(QLibrary::DeepBindHint | QLibrary::ResolveAllSymbolsHint | QLibrary::PreventUnloadHint); if (check(!handle.load())) return; diff --git a/gui/main.cpp b/gui/main.cpp index 3739232f..5d43cc14 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -202,7 +202,8 @@ main(int argc, char** argv) while (false); // msvc crashes in Qt plugin system's dtor -#if defined(_MSC_VER) + // Note: QLibrary::PreventUnloadHint seems to workaround it +#if defined(_MSC_VER) && 0 qDebug() << "exit: terminating"; TerminateProcess(GetCurrentProcess(), 0); #endif diff --git a/proto-fsuipc/ftnoir_protocol_fsuipc.cpp b/proto-fsuipc/ftnoir_protocol_fsuipc.cpp index bdb67c3f..64a14f5f 100644 --- a/proto-fsuipc/ftnoir_protocol_fsuipc.cpp +++ b/proto-fsuipc/ftnoir_protocol_fsuipc.cpp @@ -147,6 +147,7 @@ void fsuipc::pose(const double *headpose ) { module_status fsuipc::initialize() { FSUIPCLib.setFileName( s.LocationOfDLL ); + FSUIPCLib.setLoadHints(QLibrary::PreventUnloadHint); if (FSUIPCLib.load() != true) return error(_("Can't load fsuipc at '%1'").arg(s.LocationOfDLL)); diff --git a/proto-simconnect/ftnoir_protocol_sc.cpp b/proto-simconnect/ftnoir_protocol_sc.cpp index 1a844429..812fdcb3 100644 --- a/proto-simconnect/ftnoir_protocol_sc.cpp +++ b/proto-simconnect/ftnoir_protocol_sc.cpp @@ -170,6 +170,7 @@ module_status simconnect::initialize() if (ctx.is_ok()) { SCClientLib.setFileName("SimConnect.dll"); + SCClientLib.setLoadHints(QLibrary::PreventUnloadHint); if (!SCClientLib.load()) return error(tr("dll load failed -- %1").arg(SCClientLib.errorString())); } -- cgit v1.2.3