RFR: 8304147: JVM crash during shutdown when dumping dynamic archive [v2]

David Holmes dholmes at openjdk.org
Wed Mar 22 22:17:27 UTC 2023


> `DynamicArchive::prepare_for_dump_at_exit()` could be called concurrently on the two VM exit paths, leading either to assertion failures in debug builds, or a crash in product build when the actual dump occurred. The basic fix was to move the `DynamicArchive::prepare_for_dump_at_exit()` functionality into `before_exit` (java.cpp) where it can only be executed by one thread - thus avoiding the race (Phase 1).
> 
> Once that is done we can move the actual dump operation to be co-located with the `prepare_for_dump_at_exit()` (Phase 2) and then consolidate that code by refactoring it into a new `DynamicArchive::dump_at_exit()` method (Phase 3), and then removing the leftover methods that are no longer needed (Phase 4).
> 
> Each phase can be seen in distinct commits if you prefer to see the steps involved.
> 
> Testing:
>  - new ExitRace test
>  - all dynamicArchive tests
>  - tiers 1-4
> 
> Thanks.

David Holmes has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 12 additional commits since the last revision:

 - Restore comment to as it was pre JDK-8266770
 - Update test to removing debugging code
 - Merge branch 'master' into 8304147-dynamic-dump
 - Update test comments
 - Phase 4: remove unused methods and adjust dump_for_jcmd
 - Missed removing the check at the dump_at_exit callsite.
 - Phase 3: Consolidate code into a new dump_at_exit that combines check, prepare and dump in one.
   Minor tweak to test.
 - Merge branch '8304147-test-only' into 8304147-dynamic-dump
 - Initial test
 - Phase 2: Move the dump to immediately after the prepare_for_dump
 - ... and 2 more: https://git.openjdk.org/jdk/compare/d0948571...518f5409

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/13134/files
  - new: https://git.openjdk.org/jdk/pull/13134/files/d0d0d5d1..518f5409

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=13134&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13134&range=00-01

  Stats: 3194 lines in 227 files changed: 1758 ins; 951 del; 485 mod
  Patch: https://git.openjdk.org/jdk/pull/13134.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13134/head:pull/13134

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


More information about the hotspot-runtime-dev mailing list