RFR: 8265605: Cannot call BootLoader::loadClassOrNull before initPhase2 [v4]
Ioi Lam
iklam at openjdk.java.net
Fri May 14 05:47:17 UTC 2021
> This bug was discovered during the development of [JDK-6824466](https://bugs.openjdk.java.net/browse/JDK-6824466): when CDS is enabled, if `BootLoader::loadClassOrNull` is called before `initPhase2`, it would trigger the initialization of the archived module graph in the wrong order. Because of unanticipated nesting of `<clinit>` methods, `BootLoader::SERVICES_CATALOG` becomes empty, causing future `ServiceLoader` operations to fail.
>
> The fix has 2 parts:
>
> - `BootLoader::loadClassOrNull` no longer calls `ClassLoaders::bootLoader()`. This avoids triggering the archived module graph initialization. Instead, it makes a direct call to `Classloader::findBootstrapClassOrNull()`. We don't actually need a `ClassLoader` instance for this call, so I changed `Classloader::findBootstrapClassOrNull()` to be a static method.
> - The object returned by `BootLoader::getServicesCatalog()` is now maintained inside `jdk.internal.loader.ClassLoaders`. Although not strictly required for the fix, this simplifies the initialization of the archived module graph. It also makes the logic consistent for the 3 built-in loaders (boot/platform/app).
>
> Testing: tiers1-4 in progress. I also verified that the bug reported by Mandy is no longer reproducible after I applied this patch on her branch.
Ioi Lam 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 four additional commits since the last revision:
- Merge branch 'master' into 8265605-bootloader-loadClassOrNull-before-init-phase2
- cleaned up ClassLoaders.setArchivedServicesCatalog
- @AlanBateman comments
- 8265605: Cannot call BootLoader::loadClassOrNull before initPhase2
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/3992/files
- new: https://git.openjdk.java.net/jdk/pull/3992/files/4cd981c0..a3dc9427
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3992&range=03
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3992&range=02-03
Stats: 9450 lines in 343 files changed: 2601 ins; 4164 del; 2685 mod
Patch: https://git.openjdk.java.net/jdk/pull/3992.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3992/head:pull/3992
PR: https://git.openjdk.java.net/jdk/pull/3992
More information about the core-libs-dev
mailing list