Browse Source

Cleanup JackWinProcessSync and JackWinMutex.

tags/1.9.9.5
Stephane Letz 13 years ago
parent
commit
c8e2659020
3 changed files with 54 additions and 8 deletions
  1. +7
    -7
      windows/JackWinMutex.cpp
  2. +46
    -1
      windows/JackWinProcessSync.cpp
  3. +1
    -0
      windows/JackWinProcessSync.h

+ 7
- 7
windows/JackWinMutex.cpp View File

@@ -31,11 +31,11 @@ namespace Jack
fOwner = GetCurrentThreadId();
return true;
} else {
jack_log("JackWinMutex::Lock res = %d", res);
jack_log("JackBaseWinMutex::Lock res = %d", res);
return false;
}
} else {
jack_error("JackWinMutex::Lock mutex already locked by thread = %d", GetCurrentThreadId());
jack_error("JackBaseWinMutex::Lock mutex already locked by thread = %d", GetCurrentThreadId());
return false;
}
}
@@ -48,11 +48,11 @@ namespace Jack
fOwner = GetCurrentThreadId();
return true;
} else {
jack_log("JackWinMutex::Trylock res = %d", res);
jack_log("JackBaseWinMutex::Trylock res = %d", res);
return false;
}
} else {
jack_error("JackWinMutex::Trylock mutex already locked by thread = %d", GetCurrentThreadId());
jack_error("JackBaseWinMutex::Trylock mutex already locked by thread = %d", GetCurrentThreadId());
return false;
}
}
@@ -65,11 +65,11 @@ namespace Jack
if (res != 0) {
return true;
} else {
jack_log("JackWinMutex::Unlock res = %d", res);
jack_log("JackBaseWinMutex::Unlock res = %d", res);
return false;
}
} else {
jack_error("JackWinMutex::Unlock mutex not locked by thread = %d", GetCurrentThreadId());
jack_error("JackBaseWinMutex::Unlock mutex not locked by thread = %d", GetCurrentThreadId());
return false;
}
}
@@ -89,7 +89,7 @@ namespace Jack
if (WAIT_OBJECT_0 == WaitForSingleObject(fMutex, 0)) {
return true;
} else {
jack_log("JackWinProcessSync::Lock WaitForSingleObject err = %d", GetLastError());
jack_log("JackWinProcessSync::Trylock WaitForSingleObject err = %d", GetLastError());
return false;
}
}


+ 46
- 1
windows/JackWinProcessSync.cpp View File

@@ -91,7 +91,6 @@ bool JackWinProcessSync::LockedTimedWait(long usec)
return TimedWait(usec);
}


/*
// Code from APPLE CAGuard.cpp : does not seem to work as expected...

@@ -106,6 +105,28 @@ void JackWinProcessSync::Wait()
}
}

// Variant that behaves differently depending of the mutex state
void JackWinProcessSync::Wait()
{
if (ReleaseMutex(fMutex)) {
HANDLE handles[] = { fMutex, fEvent };
DWORD res = WaitForMultipleObjects(2, handles, true, INFINITE);
if (res != WAIT_OBJECT_0) {
jack_error("JackWinProcessSync::LockedWait WaitForMultipleObjects err = %d", GetLastError());
}
} else {
jack_error("JackWinProcessSync::Wait ReleaseMutex err = %d", GetLastError());
DWORD res = WaitForSingleObject(fEvent, INFINITE);
if (res != WAIT_OBJECT_0) {
jack_error("JackWinProcessSync::Wait WaitForSingleObject err = %d", GetLastError());
}
}
if (!ResetEvent(fEvent)) {
jack_error("JackWinProcessSync::LockedWait ResetEvent err = %d", GetLastError());
}
}

void JackWinProcessSync::LockedWait()
{
if (!ReleaseMutex(fMutex)) {
@@ -137,6 +158,30 @@ bool JackWinProcessSync::TimedWait(long usec)
return (res == WAIT_OBJECT_0);
}

// Variant that behaves differently depending of the mutex state
bool JackWinProcessSync::TimedWait(long usec)
{
if (ReleaseMutex(fMutex)) {
HANDLE handles[] = { fMutex, fEvent };
DWORD res = WaitForMultipleObjects(2, handles, true, usec / 1000);
if ((res != WAIT_OBJECT_0) && (res != WAIT_TIMEOUT)) {
jack_error("JackWinProcessSync::LockedTimedWait WaitForMultipleObjects err = %d", GetLastError());
}
} else {
jack_error("JackWinProcessSync::TimedWait ReleaseMutex err = %d", GetLastError());
DWORD res = WaitForSingleObject(fEvent, usec / 1000);
if (res != WAIT_OBJECT_0) {
jack_error("JackWinProcessSync::TimedWait WaitForSingleObject err = %d", GetLastError());
}
}
if (!ResetEvent(fEvent)) {
jack_error("JackWinProcessSync::LockedTimedWait ResetEvent err = %d", GetLastError());
}
return (res == WAIT_OBJECT_0);
}

bool JackWinProcessSync::LockedTimedWait(long usec)
{
if (!ReleaseMutex(fMutex)) {


+ 1
- 0
windows/JackWinProcessSync.h View File

@@ -46,6 +46,7 @@ class JackWinProcessSync : public JackWinMutex
//fEvent = CreateEvent(NULL, TRUE, FALSE, buffer); // Needs ResetEvent
fEvent = CreateEvent(NULL, FALSE, FALSE, buffer); // Auto-reset event
} else {
//fEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // Needs ResetEvent
fEvent = CreateEvent(NULL, FALSE, FALSE, NULL); // Auto-reset event
}



Loading…
Cancel
Save