-
Notifications
You must be signed in to change notification settings - Fork 5.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
8292318: Memory corruption in remove_dumptime_info #9887
8292318: Memory corruption in remove_dumptime_info #9887
Conversation
👋 Welcome back iklam! A progress list of the required criteria for merging this PR into |
Webrevs
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks good. This makes sense to me with the comments.
@iklam This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been no new commits pushed to the ➡️ To integrate this PR with the above commit message to the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've one question. Looks good otherwise.
src/hotspot/share/oops/cpCache.cpp
Outdated
MetadataFactory::free_array<ConstantPoolCacheEntry>(data, _initial_entries); | ||
_initial_entries = NULL; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should the above be inside the following condition like before?
if (Arguments::is_dumping_archive()) {
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added a more strict check -- since _initial_entries is set only during CDS dump time, I added an assert that if _initial_entries is non NULL, we must be dumping.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The non NULL check is good.
…memory-corruption-in-remove-dumptime-info-ver2
Thanks for the review @calvinccheung @coleenp |
Going to push as commit 27b0f77. |
In JDK-8290833 (#9759), I added a table (
SystemDictionaryShared::_saved_cpcache_entries_table
) that remembers the initial state of aConstantPoolCache
during CDS dumping. This table is indexed with aConstantPoolCache*
However,
ConstantPoolCache
has a complex lifecycle, especially with class redefinition. This makes it difficult to clean up the table. The crash reported in the current bug happened during clean up, probably because anInstanceKlass
was still valid but itsConstantPool
orConstantPoolCache
were not.For simplification, I am now storing the information inside the
ConstantPoolCache
. To compensate for the extra space used, I moved two 32-bit integers next to each other, so the net change in size is zero.instanceKlass.cpp was reverted to the state before #9759.
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk pull/9887/head:pull/9887
$ git checkout pull/9887
Update a local copy of the PR:
$ git checkout pull/9887
$ git pull https://git.openjdk.org/jdk pull/9887/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 9887
View PR using the GUI difftool:
$ git pr show -t 9887
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/9887.diff