diff --git a/3rdparty/RunGuard.hpp b/3rdparty/RunGuard.hpp index f24c798c9..77d97e2ac 100644 --- a/3rdparty/RunGuard.hpp +++ b/3rdparty/RunGuard.hpp @@ -58,12 +58,12 @@ RunGuard::~RunGuard() { } bool RunGuard::isAnotherRunning(quint64 *data_out) { - if (sharedMem.isAttached()) + if (sharedMem.isAttached()) { return false; + } memLock.acquire(); - const bool isRunning = sharedMem.attach(); - if (isRunning) { + const bool isRunning = sharedMem.create(sizeof(quint64));if (!isRunning) { if (data_out != nullptr) { memcpy(data_out, sharedMem.data(), sizeof(quint64)); } @@ -71,15 +71,21 @@ bool RunGuard::isAnotherRunning(quint64 *data_out) { } memLock.release(); - return isRunning; + return !isRunning; } + bool RunGuard::tryToRun(quint64 *data_in) { if (isAnotherRunning(nullptr)) // Extra check return false; memLock.acquire(); - const bool result = sharedMem.create(sizeof(quint64)); + + bool result = sharedMem.attach(); + // if success attach, attach return false but the error is NoError, magic, love from qt6 + // qt docs: If false is returned, call error() to determine which error occurred. + if (!result) if (sharedMem.error() == QSharedMemory::NoError) result = true; + if (result) memcpy(sharedMem.data(), data_in, sizeof(quint64)); memLock.release();