Skip to content

Commit c28bb8b

Browse files
author
David Holmes
committed
8361647: Report the error reason on failed semaphore calls on macOS
Reviewed-by: shade, ayang, jwaters
1 parent 518536c commit c28bb8b

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/hotspot/os/bsd/semaphore_bsd.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,23 @@
3131
#ifdef __APPLE__
3232
// OS X doesn't support unnamed POSIX semaphores, so the implementation in os_posix.cpp can't be used.
3333

34-
static const char* sem_init_strerror(kern_return_t value) {
34+
static const char* sem_strerror(kern_return_t value) {
3535
switch (value) {
36-
case KERN_INVALID_ARGUMENT: return "Invalid argument";
37-
case KERN_RESOURCE_SHORTAGE: return "Resource shortage";
38-
default: return "Unknown";
36+
case KERN_INVALID_ARGUMENT: return "Invalid argument";
37+
case KERN_RESOURCE_SHORTAGE: return "Resource shortage";
38+
case KERN_TERMINATED: return "Resource has been destroyed";
39+
case KERN_ABORTED: return "Operation was aborted";
40+
case KERN_INVALID_VALUE: return "Invalid time specified";
41+
case KERN_OPERATION_TIMED_OUT: return "Operation timed-out";
42+
default: return "Unknown";
3943
}
4044
}
4145

4246
OSXSemaphore::OSXSemaphore(uint value) {
4347
kern_return_t ret = semaphore_create(mach_task_self(), &_semaphore, SYNC_POLICY_FIFO, value);
4448

45-
guarantee(ret == KERN_SUCCESS, "Failed to create semaphore: %s", sem_init_strerror(ret));
49+
guarantee(ret == KERN_SUCCESS, "Failed to create semaphore: %s (0x%x)",
50+
sem_strerror(ret), (uint)ret);
4651
}
4752

4853
OSXSemaphore::~OSXSemaphore() {
@@ -53,7 +58,8 @@ void OSXSemaphore::signal(uint count) {
5358
for (uint i = 0; i < count; i++) {
5459
kern_return_t ret = semaphore_signal(_semaphore);
5560

56-
assert(ret == KERN_SUCCESS, "Failed to signal semaphore");
61+
assert(ret == KERN_SUCCESS, "Failed to signal semaphore: %s (0x%x)",
62+
sem_strerror(ret), (uint)ret);
5763
}
5864
}
5965

@@ -62,7 +68,8 @@ void OSXSemaphore::wait() {
6268
while ((ret = semaphore_wait(_semaphore)) == KERN_ABORTED) {
6369
// Semaphore was interrupted. Retry.
6470
}
65-
assert(ret == KERN_SUCCESS, "Failed to wait on semaphore");
71+
assert(ret == KERN_SUCCESS, "Failed to wait on semaphore: %s (0x%x)",
72+
sem_strerror(ret), (uint)ret);
6673
}
6774

6875
bool OSXSemaphore::trywait() {
@@ -100,6 +107,10 @@ bool OSXSemaphore::timedwait(int64_t millis) {
100107
kr = semaphore_timedwait(_semaphore, waitspec);
101108
}
102109

110+
assert(kr == KERN_SUCCESS || kr == KERN_OPERATION_TIMED_OUT,
111+
"Failed to timed-wait on semaphore: %s (0x%x)",
112+
sem_strerror(kr), (uint)kr);
113+
103114
return kr == KERN_SUCCESS;
104115
}
105116
#endif // __APPLE__

0 commit comments

Comments
 (0)