20 #include "JackWinProcessSync.h"
21 #include "JackError.h"
26 void JackWinProcessSync::Signal()
28 if (!SetEvent(fEvent)) {
29 jack_error(
"JackWinProcessSync::Signal SetEvent err = %d", GetLastError());
33 void JackWinProcessSync::LockedSignal()
35 DWORD res = WaitForSingleObject(fMutex, INFINITE);
36 if (res != WAIT_OBJECT_0) {
37 jack_error(
"JackWinProcessSync::LockedSignal WaitForSingleObject err = %d", GetLastError());
39 if (!SetEvent(fEvent)) {
40 jack_error(
"JackWinProcessSync::LockedSignal SetEvent err = %d", GetLastError());
42 if (!ReleaseMutex(fMutex)) {
43 jack_error(
"JackWinProcessSync::LockedSignal ReleaseMutex err = %d", GetLastError());
47 void JackWinProcessSync::SignalAll()
52 void JackWinProcessSync::LockedSignalAll()
70 void JackWinProcessSync::LockedWait()
91 bool JackWinProcessSync::LockedTimedWait(
long usec)
94 return TimedWait(usec);
97 void JackWinProcessSync::Wait()
100 if (ReleaseMutex(fMutex)) {
101 HANDLE handles[] = { fMutex, fEvent };
102 DWORD res = WaitForMultipleObjects(2, handles,
true, INFINITE);
103 if (res != WAIT_OBJECT_0) {
104 jack_error(
"JackWinProcessSync::Wait WaitForMultipleObjects err = %d", GetLastError());
108 jack_error(
"JackWinProcessSync::Wait ReleaseMutex err = %d", GetLastError());
109 DWORD res = WaitForSingleObject(fEvent, INFINITE);
110 if (res != WAIT_OBJECT_0) {
111 jack_error(
"JackWinProcessSync::Wait WaitForSingleObject err = %d", GetLastError());
115 if (!ResetEvent(fEvent)) {
116 jack_error(
"JackWinProcessSync::Wait ResetEvent err = %d", GetLastError());
120 bool JackWinProcessSync::TimedWait(
long usec)
125 if (ReleaseMutex(fMutex)) {
126 HANDLE handles[] = { fMutex, fEvent };
127 res = WaitForMultipleObjects(2, handles,
true, usec / 1000);
128 if ((res != WAIT_OBJECT_0) && (res != WAIT_TIMEOUT)) {
129 jack_error(
"JackWinProcessSync::TimedWait WaitForMultipleObjects err = %d", GetLastError());
133 jack_error(
"JackWinProcessSync::TimedWait ReleaseMutex err = %d", GetLastError());
134 res = WaitForSingleObject(fEvent, usec / 1000);
135 if (res != WAIT_OBJECT_0) {
136 jack_error(
"JackWinProcessSync::TimedWait WaitForSingleObject err = %d", GetLastError());
140 if (!ResetEvent(fEvent)) {
141 jack_error(
"JackWinProcessSync::TimedWait ResetEvent err = %d", GetLastError());
144 return (res == WAIT_OBJECT_0);
SERVER_EXPORT void jack_error(const char *fmt,...)