8376286: VM asserts with "assert(false) failed: Possible safepoint reached by thread that does not allow it" when running with -XX:+ExitOnFullCodeCache#31667
Conversation
…es not allow it when running with -XX:+ExitOnFullCodeCache Replace the manual before_exit() + exit_globals() + vm_direct_exit() sequence with vm_exit() which correctly transitions the compiler thread state to _thread_in_vm before initiating shutdown, allowing it to safely acquire locks that may reach a safepoint.
|
👋 Welcome back 0zzy0sbourne! A progress list of the required criteria for merging this PR into |
|
❗ This change is not yet ready to be integrated. |
|
@0zzy0sbourne The following label will be automatically applied to this pull request:
When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command. |
|
The total number of required reviews for this PR has been set to 2 based on the presence of this label: |
With
-XX:+ExitOnFullCodeCache,handle_full_code_cache()callsbefore_exit()directly from a compiler thread. This triggers an assertion failure because compiler threads are not allowed to reach a safepoint, andbefore_exit()acquires theBeforeExit_lockwhich may safepoint.Replace the manual
before_exit()+exit_globals()+vm_direct_exit()sequence withvm_exit(), which transitions the thread state to_thread_in_vmbefore initiating shutdown, making safepoint-reaching operations legal.Reproducible with
java -XX:+ExitOnFullCodeCache -XX:NonNMethodCodeHeapSize=500M -XX:ReservedCodeCacheSize=512008K -versionTesting
Built hotspot (
linux-x86_64-server-release) successfully.Progress
Issue
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/31667/head:pull/31667$ git checkout pull/31667Update a local copy of the PR:
$ git checkout pull/31667$ git pull https://git.openjdk.org/jdk.git pull/31667/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 31667View PR using the GUI difftool:
$ git pr show -t 31667Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/31667.diff
Using Webrev
Link to Webrev Comment