From 79ea0746fa389df838d5db70506cb6799b432078 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 29 Jan 2023 12:57:36 +0100 Subject: macOS: killing a thread will abort the semaphore wait Signed-off-by: falkTX --- macosx/JackMachSemaphore.mm | 24 ++++++++++++++++-------- 1 file 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. -- cgit v1.2.1