RFR: 8290732: JNI DestroyJavaVM can start shutdown when one non-daemon thread remains
David Holmes
dholmes at openjdk.org
Thu Aug 11 02:03:34 UTC 2022
On Tue, 9 Aug 2022 08:25:49 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:
>> Please review this fix for a problem discovered by @stuart-marks in the course of examining the VM shutdown behaviour. The VM code assumed that only unattached threads called JNI's DestroyJavaVM and so they were always attached as non-daemon threads. But it is perfectly valid to call DestroyJavaVM from an already attached thread, which could be a daemon. The fix simply checks whether the caller is a daemon or not and adjusts the expected count of active threads to see. There is also an adjustment to the thread termination logic to also notify at the right time.
>>
>> Thanks to @stuart-marks for the reproducer in JBS - the longest part of this by many hours was converting the test over the jtreg. :)
>>
>> Testing:
>> - the new test on all core platforms
>> - tiers 1-3
>> Thanks.
>
> test/hotspot/jtreg/runtime/jni/daemonDestroy/Main.java line 36:
>
>> 34: static volatile Thread t1;
>> 35:
>> 36: // Note: not normal main(String[] args)
>
> Nit: why is it important that this not be a normal main? Maybe just rename it to something very different?
I will delete the comment. It was really a note-to-self after I finally debugged the NoSuchMethodError I was getting because I'd copied code that looks for a regular "main".
-------------
PR: https://git.openjdk.org/jdk/pull/9803
More information about the build-dev
mailing list