21 #ifndef __JackWinMutex__
22 #define __JackWinMutex__
24 #include "JackError.h"
25 #include "JackException.h"
46 fMutex = (HANDLE)CreateMutex(0, FALSE, 0);
47 ThrowIf(fMutex == 0,
JackException(
"JackWinMutex: could not init the mutex"));
57 if (fOwner != GetCurrentThreadId()) {
58 DWORD res = WaitForSingleObject(fMutex, INFINITE);
59 if (res == WAIT_OBJECT_0) {
60 fOwner = GetCurrentThreadId();
63 jack_log(
"JackWinMutex::Lock res = %d", res);
67 jack_error(
"JackWinMutex::Lock mutex already locked by thread = %d", GetCurrentThreadId());
74 if (fOwner != GetCurrentThreadId()) {
75 DWORD res = WaitForSingleObject(fMutex, 0);
76 if (res == WAIT_OBJECT_0) {
77 fOwner = GetCurrentThreadId();
80 jack_log(
"JackWinMutex::Trylock res = %d", res);
84 jack_error(
"JackWinMutex::Trylock mutex already locked by thread = %d", GetCurrentThreadId());
91 if (fOwner == GetCurrentThreadId()) {
93 int res = ReleaseMutex(fMutex);
97 jack_log(
"JackWinMutex::Unlock res = %d", res);
101 jack_error(
"JackWinMutex::Unlock mutex not locked by thread = %d", GetCurrentThreadId());
120 fMutex = (HANDLE)CreateMutex(0, FALSE, 0);
130 return (WAIT_OBJECT_0 == WaitForSingleObject(fMutex, INFINITE));
135 return (WAIT_OBJECT_0 == WaitForSingleObject(fMutex, 0));
140 return(ReleaseMutex(fMutex) != 0);