-
Type:
Bug
-
Resolution: Fixed
-
Priority:
P3
-
Affects Version/s: 26
-
Component/s: hotspot
-
b20
| Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
|---|---|---|---|---|---|---|
| JDK-8375627 | 25.0.3-oracle | Markus Grönlund | P3 | Resolved | Fixed | b02 |
| JDK-8376685 | 25.0.3 | Goetz Lindenmaier | P3 | Resolved | Fixed | b01 |
The original semaphore related crash was:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/System/Volumes/Data/mesos/work_dir/slaves/d2398cde-9325-49c3-b030-8961a4f0a253-S577077/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/1725c443-f2fc-4cb3-8d36-4912f92abfb1/runs/bf13cee2-c1c1-49dc-af9a-95488455fd59/workspace/open/src/hotspot/os/bsd/semaphore_bsd.cpp:65), pid=69909, tid=58739
# assert(ret == 0) failed: Failed to wait on semaphore
--------------- T H R E A D ---------------
Current thread (0x0000000298d41a10): JavaThread "Thread-7972" daemon [_thread_in_vm, id=58739, stack(0x000000028ab04000,0x000000028ad07000) (2060K)]
Stack: [0x000000028ab04000,0x000000028ad07000], sp=0x000000028ad05c30, free space=2055k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.dylib+0x12125c8] VMError::report(outputStream*, bool)+0x1b00 (semaphore_bsd.cpp:65)
V [libjvm.dylib+0x1215e68] VMError::report_and_die(int, char const*, char const*, char*, Thread*, unsigned char*, void const*, void const*, char const*, int, unsigned long)+0x55c
V [libjvm.dylib+0x5a8448] print_error_for_unit_test(char const*, char const*, char*)+0x0
V [libjvm.dylib+0xfd8330] OSXSemaphore::trywait()+0x0
V [libjvm.dylib+0x98cd00] JfrThreadGroup::thread_group_id_internal(JfrThreadGroupsHelper&)+0x30
V [libjvm.dylib+0x98cc10] JfrThreadGroup::thread_group_id(JavaThread const*, Thread*)+0xe8
The JFR code has been reorganized somewhat since the initial report but it still contains three statically allocated Semaphores:
./share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.cpp: static Semaphore _mutex_semaphore;
./share/jfr/recorder/checkpoint/types/jfrThreadGroupManager.cpp: static Semaphore _mutex_semaphore;
./share/jfr/recorder/checkpoint/types/jfrTypeManager.cpp: static Semaphore _mutex_semaphore;
These Semaphores need to be examined to see if they can be used after the static destructor has executed, during VM termination. The Semaphore is unsafe if it can be accessed by a `NonJavaThread`, or by a `JavaThread` in a safepoint-safe state.
- backported by
-
JDK-8375627 Assess and remedy any unsafe usage of the Semaphores used by JFR
-
- Resolved
-
-
JDK-8376685 Assess and remedy any unsafe usage of the Semaphores used by JFR
-
- Resolved
-
- causes
-
JDK-8369991 Thread blocking during JFR emergency dump must be in safepoint safe state
-
- Resolved
-
- relates to
-
JDK-8361462 Investigate JVM crashes with assert(ret == 0) failed: Failed to wait on semaphore
-
- Resolved
-
- links to
-
Commit(master)
openjdk/jdk25u-dev/776f7e0a
-
Commit(master)
openjdk/jdk/62fa971f
-
Review(master)
openjdk/jdk25u-dev/185
-
Review(master)
openjdk/jdk/27722