diff options
author | falkTX <falktx@falktx.com> | 2023-01-29 12:57:36 +0100 |
---|---|---|
committer | falkTX <falktx@falktx.com> | 2023-01-29 12:57:36 +0100 |
commit | 79ea0746fa389df838d5db70506cb6799b432078 (patch) | |
tree | 9e2b28da7d7692b04ee11f8e10cba45cb9317a65 | |
parent | ae9993bb34bf756e075fe37649df0b7f0e660cc3 (diff) | |
download | jack2-79ea0746fa389df838d5db70506cb6799b432078.tar.gz |
macOS: killing a thread will abort the semaphore wait
Signed-off-by: falkTX <falktx@falktx.com>
-rw-r--r-- | macosx/JackMachSemaphore.mm | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/macosx/JackMachSemaphore.mm b/macosx/JackMachSemaphore.mm index c28fe5ab..f2ba3dd7 100644 --- a/macosx/JackMachSemaphore.mm +++ b/macosx/JackMachSemaphore.mm @@ -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. |