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. ------------- Commit messages: - Remove commented out test code - 8290732: JNI DestroyJavaVM can start shutdown when one non-daemon thread remains Changes: https://git.openjdk.org/jdk/pull/9803/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9803&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8290732 Stats: 249 lines in 5 files changed: 243 ins; 0 del; 6 mod Patch: https://git.openjdk.org/jdk/pull/9803.diff Fetch: git fetch https://git.openjdk.org/jdk pull/9803/head:pull/9803 PR: https://git.openjdk.org/jdk/pull/9803