make use of QLockFile

use_std_locale
psi29a 2 years ago
parent 063aa9df76
commit 2e1820fefd

@ -1,6 +1,7 @@
#include "editor.hpp" #include "editor.hpp"
#include <QApplication> #include <QApplication>
#include <QFileInfo>
#include <QLocalServer> #include <QLocalServer>
#include <QLocalSocket> #include <QLocalSocket>
#include <QMessageBox> #include <QMessageBox>
@ -22,6 +23,7 @@
#ifdef _WIN32 #ifdef _WIN32
#include <components/windows.hpp> #include <components/windows.hpp>
#endif #endif
#include <components/debug/debugging.hpp> #include <components/debug/debugging.hpp>
#include <components/debug/debuglog.hpp> #include <components/debug/debuglog.hpp>
#include <components/esm3/esmreader.hpp> #include <components/esm3/esmreader.hpp>
@ -42,8 +44,8 @@ CS::Editor::Editor(int argc, char** argv)
: mConfigVariables(readConfiguration()) : mConfigVariables(readConfiguration())
, mSettingsState(mCfgMgr) , mSettingsState(mCfgMgr)
, mDocumentManager(mCfgMgr) , mDocumentManager(mCfgMgr)
, mPid("") , mPid(std::filesystem::temp_directory_path() / "openmw-cs.pid")
, mLock() , mLockFile(QFileInfo(mPid.c_str()).absoluteFilePath() + ".lock")
, mMerge(mDocumentManager) , mMerge(mDocumentManager)
, mIpcServerName("org.openmw.OpenCS") , mIpcServerName("org.openmw.OpenCS")
, mServer(nullptr) , mServer(nullptr)
@ -95,6 +97,7 @@ CS::Editor::~Editor()
{ {
delete mViewManager; delete mViewManager;
mLockFile.unlock();
mPidFile.close(); mPidFile.close();
if (mServer && std::filesystem::exists(mPid)) if (mServer && std::filesystem::exists(mPid))
@ -336,14 +339,11 @@ bool CS::Editor::makeIPCServer()
{ {
try try
{ {
mPid = std::filesystem::temp_directory_path();
mPid /= "openmw-cs.pid";
bool pidExists = std::filesystem::exists(mPid); bool pidExists = std::filesystem::exists(mPid);
mPidFile.open(mPid); mPidFile.open(mPid);
mLock = boost::interprocess::file_lock(mPid.c_str()); if (!mLockFile.tryLock())
if (!mLock.try_lock())
{ {
Log(Debug::Error) << "Error: OpenMW-CS is already running."; Log(Debug::Error) << "Error: OpenMW-CS is already running.";
return false; return false;

@ -1,9 +1,9 @@
#ifndef CS_EDITOR_H #ifndef CS_EDITOR_H
#define CS_EDITOR_H #define CS_EDITOR_H
#include <boost/interprocess/sync/file_lock.hpp>
#include <boost/program_options/variables_map.hpp> #include <boost/program_options/variables_map.hpp>
#include <QLockFile>
#include <QObject> #include <QObject>
#include <QString> #include <QString>
@ -58,7 +58,7 @@ namespace CS
std::filesystem::path mLocal; std::filesystem::path mLocal;
std::filesystem::path mResources; std::filesystem::path mResources;
std::filesystem::path mPid; std::filesystem::path mPid;
boost::interprocess::file_lock mLock; QLockFile mLockFile;
std::ofstream mPidFile; std::ofstream mPidFile;
bool mFsStrict; bool mFsStrict;
CSVTools::Merge mMerge; CSVTools::Merge mMerge;

Loading…
Cancel
Save