summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfalkTX <falktx@falktx.com>2023-01-29 12:57:36 +0100
committerfalkTX <falktx@falktx.com>2023-01-29 12:57:36 +0100
commit79ea0746fa389df838d5db70506cb6799b432078 (patch)
tree9e2b28da7d7692b04ee11f8e10cba45cb9317a65
parentae9993bb34bf756e075fe37649df0b7f0e660cc3 (diff)
downloadjack2-79ea0746fa389df838d5db70506cb6799b432078.tar.gz
macOS: killing a thread will abort the semaphore wait
Signed-off-by: falkTX <falktx@falktx.com>
-rw-r--r--macosx/JackMachSemaphore.mm24
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.