See the JBS issue for the extended problem description.

Native threads that were attached to the JVM through an FFM upcall are 
automatically detached from the VM when they join/terminate. However, if a 
native thread tries to terminate after the VM has exited without going through 
`DestroyJavaVm` (e.g. as a result of calling `System.exit`), they will block in 
`VM_Exit::block_if_vm_exited` inside `DetachCurrentThread`. This may happen for 
instance when they try to join after the JVM has exited in an `atexit` handler.

This patch adds a check before trying to detach the thread to see if the VM has 
exited and bails out if it has. This does not prevent issues as a result of a 
race between the VM exiting and the thread joining, but it does prevent issues 
in the more comment case where a thread simply outlives the VM.

---------
- [X] I confirm that I make this contribution in accordance with the [OpenJDK 
Interim AI Policy](https://openjdk.org/legal/ai).

-------------

Commit messages:
 - cleanup PROCEDURE typedef
 - Improve TestThread callback data management
 - Refactor test helper lib
 - Add detach after exit test

Changes: https://git.openjdk.org/jdk/pull/32686/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=32686&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8391662
  Stats: 258 lines in 5 files changed: 214 ins; 17 del; 27 mod
  Patch: https://git.openjdk.org/jdk/pull/32686.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/32686/head:pull/32686

PR: https://git.openjdk.org/jdk/pull/32686

Reply via email to