RFR: 8301564: Non-C-heap allocated ResourceHashtable keys and values must have trivial destructor
Ioi Lam
iklam at openjdk.org
Wed Feb 1 19:11:41 UTC 2023
To ensure we don't have memory leaks or other more serious memory management bugs, I added static asserts to check that the `K` and `V` types for `ResourceHashtableBase` must have trivial destructors if the table is not `C_HEAP` allocated. Thanks to @JornVernee for the original assert code.
The asserts actually found a problem with `ClassLoaderStatsClosure::StatsTable`. The space used by the `oop` in the freed hashtable may be trashed when `-XX:+CheckUnhandledOops` is enabled, so live objects that reuse the same space may be corrupted. (I tried but couldn't get it to fail).
I also had to change `CodeBuffer::SharedTrampolineRequests` because it's `V` type is `LinkListImpl<int>`, which has a non-trivial destructor. (Note: in this case, the destructor doesn't do anything; we can probably make it go away with C++-20. See https://stackoverflow.com/questions/40094871/sfinae-away-a-destructor)
Testing with tier1~4 + builds-tier5
-------------
Commit messages:
- fixed aarch64 and risvc64
- fixed typo
- Fixed ClassLoaderStatsClosure::StatsTable
- 8301564: Non-C-heap allocated ResourceHashtable keys and values must have trivial destructor
Changes: https://git.openjdk.org/jdk/pull/12355/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12355&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8301564
Stats: 22 lines in 6 files changed: 14 ins; 0 del; 8 mod
Patch: https://git.openjdk.org/jdk/pull/12355.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/12355/head:pull/12355
PR: https://git.openjdk.org/jdk/pull/12355
More information about the hotspot-dev
mailing list