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

Reply via email to