diff --git a/apps/opencs/editor.cpp b/apps/opencs/editor.cpp index 01e216f442..7e9abcf4da 100644 --- a/apps/opencs/editor.cpp +++ b/apps/opencs/editor.cpp @@ -1,6 +1,7 @@ #include "editor.hpp" #include +#include #include #include #include @@ -22,6 +23,7 @@ #ifdef _WIN32 #include #endif + #include #include #include @@ -42,8 +44,8 @@ CS::Editor::Editor(int argc, char** argv) : mConfigVariables(readConfiguration()) , mSettingsState(mCfgMgr) , mDocumentManager(mCfgMgr) - , mPid("") - , mLock() + , mPid(std::filesystem::temp_directory_path() / "openmw-cs.pid") + , mLockFile(QFileInfo(mPid.c_str()).absoluteFilePath() + ".lock") , mMerge(mDocumentManager) , mIpcServerName("org.openmw.OpenCS") , mServer(nullptr) @@ -95,6 +97,7 @@ CS::Editor::~Editor() { delete mViewManager; + mLockFile.unlock(); mPidFile.close(); if (mServer && std::filesystem::exists(mPid)) @@ -336,14 +339,11 @@ bool CS::Editor::makeIPCServer() { try { - mPid = std::filesystem::temp_directory_path(); - mPid /= "openmw-cs.pid"; bool pidExists = std::filesystem::exists(mPid); mPidFile.open(mPid); - mLock = boost::interprocess::file_lock(mPid.c_str()); - if (!mLock.try_lock()) + if (!mLockFile.tryLock()) { Log(Debug::Error) << "Error: OpenMW-CS is already running."; return false; diff --git a/apps/opencs/editor.hpp b/apps/opencs/editor.hpp index 6b30738dde..453a3d848a 100644 --- a/apps/opencs/editor.hpp +++ b/apps/opencs/editor.hpp @@ -1,9 +1,9 @@ #ifndef CS_EDITOR_H #define CS_EDITOR_H -#include #include +#include #include #include @@ -58,7 +58,7 @@ namespace CS std::filesystem::path mLocal; std::filesystem::path mResources; std::filesystem::path mPid; - boost::interprocess::file_lock mLock; + QLockFile mLockFile; std::ofstream mPidFile; bool mFsStrict; CSVTools::Merge mMerge;