On Tue, 9 Aug 2022 09:26:44 GMT, Thomas Stuefe <[email protected]> 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/TestDaemonDestroy.java line 36:
>
>> 34: * @run main/native TestDaemonDestroy
>> 35: * @run main/native TestDaemonDestroy daemon
>> 36: */
>
> If you do two @test sections, you can give them speaking names(e.g. @test
> id=demon) and they can run in parallel.
I didn't think that was warranted/necessary here.
> test/hotspot/jtreg/runtime/jni/daemonDestroy/TestDaemonDestroy.java line 59:
>
>> 57: System.out.println("Launcher = " + launcher +
>> 58: (Files.exists(launcher) ? " (exists)" : "
>> (missing)"));
>> 59:
>
> Nit: better arg handling?
> - If you want to just have one char arg, pass 'D' and 'N' for demon/nondemon
> mode instead of "1" and "".
> - Instead of using args.length, maybe actually parse the input argument, or
> specify D and N there too and pass it on.
I reworked it slightly so the Java side doesn't pass "" and the native code
interprets any additional arg as "use daemon".
-------------
PR: https://git.openjdk.org/jdk/pull/9803