-
Notifications
You must be signed in to change notification settings - Fork 6.1k
8371418: Methods in AdapterHandlerLibrary use HashtableBase iterate method incorrectly #28197
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
base: master
Are you sure you want to change the base?
8371418: Methods in AdapterHandlerLibrary use HashtableBase iterate method incorrectly #28197
Conversation
…ethod incorrectly Signed-off-by: Ashutosh Mehra <asmehra@redhat.com>
|
👋 Welcome back asmehra! A progress list of the required criteria for merging this PR into |
|
❗ This change is not yet ready to be integrated. |
|
@ashu-mehra 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. |
Webrevs
|
| template<typename Function> | ||
| inline void iterate(Function& function) const { // lambda enabled API |
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.
Add comment explaining when it is exiting, when iteration is interrupted to show difference from iterate_all()
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.
Done
| if (!found) { | ||
| auto findblob_runtime_table = [&] (AdapterFingerPrint* key, AdapterHandlerEntry* a) { | ||
| return (found = (b == CodeCache::find_blob(a->get_i2c_entry()))); | ||
| auto findblob_runtime_table = [&] (AdapterFingerPrint* key, AdapterHandlerEntry* handler) { |
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.
Why do you need to pass AdapterFingerPrint* key argument which is not used here?
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 is because the function passed to HashTable::iterate is called with both key and value:
jdk/src/hotspot/share/utilities/hashTable.hpp
Line 272 in c865644
| bool cont = function(node->_key, node->_value); |
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.
Thank you for pointing this.
Signed-off-by: Ashutosh Mehra <asmehra@redhat.com>
vnkozlov
left a comment
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.
Good. I submitted testing.
|
@ashu-mehra, do you know what issue current code (before these changes) could cause? |
btw the change that introduced this bug was made more than 3 years ago in https://bugs.openjdk.org/browse/JDK-8292384 and it went in JDK 20. |
|
@vnkozlov fyi - I also opened https://bugs.openjdk.org/browse/JDK-8371493 which is going to touch the same code as this patch. I didn't includes the changes in this patch to make it easier to backport this patch if needed. |
Good. We usually don't port enhancement but we can consider it since its simplification of printing code which should not affect code execution. |
The closure passed to
HashTable::iterateinAdapterHandlerLibrary::containsandAdapterHandlerLibrary::print_handler_onis returning incorrect value. If the search is successful, it should return false to terminate the iteration, but it is returning true. This patch fixes the return value of these closures.In addition, I noticed
CompactHashTable::iterategoes through all entries unconditionally, which is not optimal for cases where we may want to terminate the iteration when some condition is met. This is the case inAdapterHandlerLibrary::containsandAdapterHandlerLibrary::print_handler_onwhen it iterates over_aot_adapter_handler_table. This patch updatesCompactHashTable::iterateto be the same asHashTAble::iterateby using return value of the closure to determine if the iteration should continue or abort. It also addsCompactHashTable::iterate_allto iterate all the values unconditionally and the users ofCompactHashTable::iterateare updated to useCompactHashTable::iterate_all.Progress
Issue
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/28197/head:pull/28197$ git checkout pull/28197Update a local copy of the PR:
$ git checkout pull/28197$ git pull https://git.openjdk.org/jdk.git pull/28197/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 28197View PR using the GUI difftool:
$ git pr show -t 28197Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/28197.diff
Using Webrev
Link to Webrev Comment