RFR: 8364314: java_lang_Thread::get_thread_status fails assert(base != nullptr) failed: Invalid base [v3]
David Holmes
dholmes at openjdk.org
Sun Aug 3 21:23:11 UTC 2025
> After the changes in JDK-8361912 we could "return " the carrier thread from `cv_internal_thread_to_JavaThread`, but before we hit the transition disabler the virtual thread could unmount. As a result when we execute this code:
>
> if (is_virtual) {
> // 1st need to disable mount/unmount transitions
> transition_disabler.init(jthread);
>
> carrier_thread = Handle(THREAD, java_lang_VirtualThread::carrier_thread(thread_h()));
> if (carrier_thread != nullptr) {
> java_thread = java_lang_Thread::thread(carrier_thread());
> }
> }
>
> we hit the implicit else where "`carrier_thread == nullptr`" and we do nothing, but `java_thread` still holds the old carrier, which we then perform the handshake operation with:
>
> void do_thread(Thread* th) override {
> Thread* current = Thread::current();
>
> bool is_virtual = java_lang_VirtualThread::is_instance(_thread_h());
> if (_java_thread != nullptr) {
> if (is_virtual) {
> // mounted vthread, use carrier thread state
> oop carrier_thread = java_lang_VirtualThread::carrier_thread(_thread_h());
> _thread_status = java_lang_Thread::get_thread_status(carrier_thread);
> } else {
>
> But the `_java_thread` no longer has a carrier, so `get_thread_status` is passed null and we crash.
>
> Simple fix is to clear `java_thread` when we find a null carrier oop. Also added an assert to guard against a null carrier oop in the handshake code, and added some additional commentary.
>
> Testing:
> - com/sun/management/HotSpotDiagnosticMXBean/DumpThreads.java
> - tier 5 and 6
>
> Thanks
David Holmes has updated the pull request incrementally with one additional commit since the last revision:
Comments from Dan
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/26544/files
- new: https://git.openjdk.org/jdk/pull/26544/files/610186f1..96f92986
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=26544&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=26544&range=01-02
Stats: 8 lines in 1 file changed: 3 ins; 0 del; 5 mod
Patch: https://git.openjdk.org/jdk/pull/26544.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/26544/head:pull/26544
PR: https://git.openjdk.org/jdk/pull/26544
More information about the hotspot-runtime-dev
mailing list