From 8fa46e2be3d2623bb3aa89e1bf3134d9105b1762 Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Sun, 5 Nov 2023 19:34:13 +0100 Subject: [PATCH] Fix crash when starting with --display, --disable-displays or --disable-inputs This happens because the PluginManager doesn't exist yet at the time when these options are handled. Fix this by moving PluginManager initialization to an earlier stage of the code. --- interface/src/Application.cpp | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 37204b0f9b..2ea558c9ae 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -763,19 +763,7 @@ bool setupEssentials(int& argc, char** argv, const QCommandLineParser& parser, b } } - // Tell the plugin manager about our statically linked plugins - DependencyManager::set(); - DependencyManager::set(); - auto pluginManager = PluginManager::getInstance(); - pluginManager->setInputPluginProvider([] { return getInputPlugins(); }); - pluginManager->setDisplayPluginProvider([] { return getDisplayPlugins(); }); - pluginManager->setInputPluginSettingsPersister([](const InputPluginList& plugins) { saveInputPluginSettings(plugins); }); - if (auto steamClient = pluginManager->getSteamClientPlugin()) { - steamClient->init(); - } - if (auto oculusPlatform = pluginManager->getOculusPlatformPlugin()) { - oculusPlatform->init(); - } + PROFILE_SET_THREAD_NAME("Main Thread"); @@ -8763,6 +8751,21 @@ void Application::sendLambdaEvent(const std::function& f) { } void Application::initPlugins(const QCommandLineParser& parser) { + // Tell the plugin manager about our statically linked plugins + DependencyManager::set(); + DependencyManager::set(); + auto pluginManager = PluginManager::getInstance(); + pluginManager->setInputPluginProvider([] { return getInputPlugins(); }); + pluginManager->setDisplayPluginProvider([] { return getDisplayPlugins(); }); + pluginManager->setInputPluginSettingsPersister([](const InputPluginList& plugins) { saveInputPluginSettings(plugins); }); + if (auto steamClient = pluginManager->getSteamClientPlugin()) { + steamClient->init(); + } + if (auto oculusPlatform = pluginManager->getOculusPlatformPlugin()) { + oculusPlatform->init(); + } + + if (parser.isSet("display")) { auto preferredDisplays = parser.value("display").split(',', Qt::SkipEmptyParts); qInfo() << "Setting prefered display plugins:" << preferredDisplays;