diff --git a/ApplicationExeCode/RiaMain.cpp b/ApplicationExeCode/RiaMain.cpp index 4a3489ea1e..89a41f2af9 100644 --- a/ApplicationExeCode/RiaMain.cpp +++ b/ApplicationExeCode/RiaMain.cpp @@ -78,6 +78,8 @@ int main( int argc, char* argv[] ) } #endif + RiaMainTools::deleteStaleSettingsLockFiles(); + // The Qt::AA_ShareOpenGLContexts setting is needed when we have multiple viz widgets in flight // and we have a setup where these widgets belong to different top-level windows, or end up // belonging to different top-level windows through re-parenting. diff --git a/ApplicationExeCode/RiaMainTools.cpp b/ApplicationExeCode/RiaMainTools.cpp index 8f5700acbb..f82e3488fe 100644 --- a/ApplicationExeCode/RiaMainTools.cpp +++ b/ApplicationExeCode/RiaMainTools.cpp @@ -17,6 +17,7 @@ ///////////////////////////////////////////////////////////////////////////////// #include "RiaMainTools.h" +#include "RiaBaseDefs.h" #include "RiaFileLogger.h" #include "RiaLogging.h" #include "RiaRegressionTestRunner.h" @@ -27,6 +28,8 @@ #include "cafPdmDefaultObjectFactory.h" #include "cafPdmUiFieldEditorHandle.h" +#include + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -53,10 +56,12 @@ void manageSegFailure( int signalCode ) exit( 1 ); } +namespace RiaMainTools +{ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiaMainTools::initializeSingletons() +void initializeSingletons() { caf::CmdFeatureManager::createSingleton(); RiaRegressionTestRunner::createSingleton(); @@ -67,7 +72,7 @@ void RiaMainTools::initializeSingletons() /// This method is used to release memory allocated by static functions. This enables use of memory allocation tools /// after the application has closed down. //-------------------------------------------------------------------------------------------------- -void RiaMainTools::releaseSingletonAndFactoryObjects() +void releaseSingletonAndFactoryObjects() { caf::CmdFeatureManager::deleteSingleton(); RiaRegressionTestRunner::deleteSingleton(); @@ -87,3 +92,51 @@ void RiaMainTools::releaseSingletonAndFactoryObjects() factory->deleteCreatorObjects(); } } + +//-------------------------------------------------------------------------------------------------- +/// On Linux, application settings are stored in a text file in the users home folder. On Windows, these settings are +/// stored in Registry. Users have reported stale lock files the configuration directory. In some cases, these lock +/// files can prevent the application from starting. It appears that the application start, but no GUI is displayed. +/// +/// This method deletes stale lock files. +/// +/// https://github.com/OPM/ResInsight/issues/12205 +//-------------------------------------------------------------------------------------------------- +void deleteStaleSettingsLockFiles() +{ + auto organizationName = QString( RI_COMPANY_NAME ); + auto applicationName = QString( RI_APPLICATION_NAME ); + + auto lockFilePath = QDir::homePath() + "/.config/" + organizationName + "/" + applicationName + ".conf.lock"; + + auto isLockStale = []( const QString& lockFilePath ) -> bool + { + QFileInfo lockFileInfo( lockFilePath ); + + if ( !lockFileInfo.exists() ) return false; + + QDateTime currentTime = QDateTime::currentDateTime(); + int thresholdSeconds = 2 * 60; // 2 minutes + + return lockFileInfo.lastModified().secsTo( currentTime ) > thresholdSeconds; + }; + + if ( isLockStale( lockFilePath ) ) + { + QFile lockFile( lockFilePath ); + + QString logMessage; + if ( lockFile.remove() ) + { + logMessage = QString( "Deleted stale lock file: %1" ).arg( lockFilePath ); + } + else + { + logMessage = QString( "Tried, but failed to delete stale lock file: %1" ).arg( lockFilePath ); + } + + qDebug() << logMessage; + } +} + +} // namespace RiaMainTools diff --git a/ApplicationExeCode/RiaMainTools.h b/ApplicationExeCode/RiaMainTools.h index 025e9bc256..d3add41c2e 100644 --- a/ApplicationExeCode/RiaMainTools.h +++ b/ApplicationExeCode/RiaMainTools.h @@ -17,9 +17,9 @@ ///////////////////////////////////////////////////////////////////////////////// #pragma once -class RiaMainTools +namespace RiaMainTools { -public: - static void initializeSingletons(); - static void releaseSingletonAndFactoryObjects(); -}; +void initializeSingletons(); +void releaseSingletonAndFactoryObjects(); +void deleteStaleSettingsLockFiles(); +}; // namespace RiaMainTools diff --git a/ApplicationLibCode/Application/RiaPreferences.cpp b/ApplicationLibCode/Application/RiaPreferences.cpp index 0bfa6424b5..42ef15e7d4 100644 --- a/ApplicationLibCode/Application/RiaPreferences.cpp +++ b/ApplicationLibCode/Application/RiaPreferences.cpp @@ -23,6 +23,7 @@ #include "RiaApplication.h" #include "RiaColorTables.h" +#include "RiaGuiApplication.h" #include "RiaLogging.h" #include "RiaPreferencesGeoMech.h" #include "RiaPreferencesGrid.h" @@ -839,6 +840,8 @@ std::map RiaPreferences::de //-------------------------------------------------------------------------------------------------- void RiaPreferences::writePreferencesToApplicationStore() { + if ( !RiaGuiApplication::isRunning() ) return; + caf::PdmSettings::writeFieldsToApplicationStore( this ); }