|
|
@@ -90,11 +90,15 @@ bool JackMachSemaphore::Wait() |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
kern_return_t res; |
|
|
|
if ((res = semaphore_wait(fSemaphore)) != KERN_SUCCESS) { |
|
|
|
jack_error("JackMachSemaphore::Wait name = %s err = %s", fName, mach_error_string(res)); |
|
|
|
kern_return_t res = semaphore_wait(fSemaphore); |
|
|
|
|
|
|
|
// killing a thread will abort the semaphore wait |
|
|
|
if (res == KERN_SUCCESS || res == KERN_ABORTED) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
return (res == KERN_SUCCESS); |
|
|
|
|
|
|
|
jack_error("JackMachSemaphore::Wait name = %s err = %s", fName, mach_error_string(res)); |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
bool JackMachSemaphore::TimedWait(long usec) |
|
|
@@ -104,15 +108,19 @@ bool JackMachSemaphore::TimedWait(long usec) |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
kern_return_t res; |
|
|
|
mach_timespec time; |
|
|
|
time.tv_sec = usec / 1000000; |
|
|
|
time.tv_nsec = (usec % 1000000) * 1000; |
|
|
|
|
|
|
|
if ((res = semaphore_timedwait(fSemaphore, time)) != KERN_SUCCESS) { |
|
|
|
jack_error("JackMachSemaphore::TimedWait name = %s usec = %ld err = %s", fName, usec, mach_error_string(res)); |
|
|
|
kern_return_t res = semaphore_timedwait(fSemaphore, time); |
|
|
|
|
|
|
|
// killing a thread will abort the semaphore wait |
|
|
|
if (res == KERN_SUCCESS || res == KERN_ABORTED) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
return (res == KERN_SUCCESS); |
|
|
|
|
|
|
|
jack_error("JackMachSemaphore::TimedWait name = %s usec = %ld err = %s", fName, usec, mach_error_string(res)); |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
/*! \brief Server side: create semaphore and publish IPC primitives to make it accessible. |
|
|
|