You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
1.7 KiB
91 lines
1.7 KiB
/*++
|
|
|
|
Copyright (c) 1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
mutex.cpp
|
|
|
|
Abstract:
|
|
|
|
SIS Groveler named mutex class
|
|
|
|
Authors:
|
|
|
|
John Douceur, 1998
|
|
|
|
Environment:
|
|
|
|
User Mode
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#include "all.hxx"
|
|
|
|
NamedMutex::NamedMutex(
|
|
const _TCHAR *name,
|
|
SECURITY_ATTRIBUTES *security_attributes)
|
|
{
|
|
ASSERT(this != 0);
|
|
mutex_handle = CreateMutex(security_attributes, FALSE, name);
|
|
if (mutex_handle == 0)
|
|
{
|
|
DWORD err = GetLastError();
|
|
PRINT_DEBUG_MSG((_T("GROVELER: CreateMutex() failed with error %d\n"), err));
|
|
}
|
|
}
|
|
|
|
NamedMutex::~NamedMutex()
|
|
{
|
|
ASSERT(this != 0);
|
|
if (mutex_handle != 0)
|
|
{
|
|
int ok = CloseHandle(mutex_handle);
|
|
if (!ok)
|
|
{
|
|
DWORD err = GetLastError();
|
|
PRINT_DEBUG_MSG((_T("GROVELER: CloseHandle() failed with error %d\n"), err));
|
|
}
|
|
mutex_handle = 0;
|
|
}
|
|
}
|
|
|
|
bool
|
|
NamedMutex::release()
|
|
{
|
|
ASSERT(this != 0);
|
|
if (mutex_handle == 0)
|
|
{
|
|
return false;
|
|
}
|
|
BOOL ok = ReleaseMutex(mutex_handle);
|
|
if (!ok)
|
|
{
|
|
DWORD err = GetLastError();
|
|
PRINT_DEBUG_MSG((_T("GROVELER: ReleaseMutex() failed with error %d\n"), err));
|
|
}
|
|
return (ok != 0);
|
|
}
|
|
|
|
bool
|
|
NamedMutex::acquire(
|
|
unsigned int timeout)
|
|
{
|
|
ASSERT(this != 0);
|
|
if (mutex_handle == 0)
|
|
{
|
|
return false;
|
|
}
|
|
ASSERT(signed(timeout) >= 0);
|
|
DWORD result = WaitForSingleObject(mutex_handle, timeout);
|
|
if (result != WAIT_TIMEOUT && result != WAIT_OBJECT_0)
|
|
{
|
|
PRINT_DEBUG_MSG((_T("GROVELER: WaitForSingleObject() returned error %d\n"),
|
|
result));
|
|
}
|
|
return (result == WAIT_OBJECT_0);
|
|
}
|