HANDLE sameApp = CreateMutex(NULL, TRUE, uniqName.c_str());
if (sameApp == NULL)
return static_cast(logMsg("CreateMutex() failed", GetLastError()));
Guard sameAppGuarded([=]() { CloseHandle(sameApp); });
if (GetLastError() == ERROR_ALREADY_EXISTS)
if (WaitForSingleObject(sameApp, INFINITE) != WAIT_OBJECT_0)
return static_cast(logMsg("Recursive run detected for " + name.filename().string(), GetLastError()));
Guard sameAppLocked([=]() { ReleaseMutex(sameApp); });
{
SECURITY_ATTRIBUTES attr = { sizeof(attr), NULL, TRUE };
HANDLE hIn = CreateFile((newName.parent_path() / "stdin.txt").string().c_str(),
FILE_GENERIC_READ, FILE_SHARE_DELETE,&attr, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
Guard hInGuarded ([=]() { CloseHandle(hIn); });
/* ... */
}