-
Notifications
You must be signed in to change notification settings - Fork 6.2k
8351374: Improve comment about queue.remove timeout in CleanerImpl.run #23952
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
8351374: Improve comment about queue.remove timeout in CleanerImpl.run #23952
Conversation
|
👋 Welcome back kbarrett! A progress list of the required criteria for merging this PR into |
|
@kimbarrett 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 122 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
|
@kimbarrett 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
|
RogerRiggs
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.
Nice clear description. Thanks
| // If the application cleans all remaining cleanables, there | ||
| // won't be any references enqueued to unblock this. Using a |
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 agree that calling queue.remove() with a timeout is the right approach.
But I have a question:
In the case where the Cleaner's CleanerCleanable has already run, and we get to processing the last registered cleanable on activeList:
When we do the ref.clean(), the activeList becomes empty, and we'll drop out of the while() loop. So I'm not seeing how we would attempt another queue.remove() in this case.
What am I missing?
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.
You are missing that this loop is not the only place that potentially removes
references from activeList. The application may also do so, when directly
cleaning (as part of a close() operation or the like). So the cleaner's
cleanable may be dropped, removed, and cleaned but with live entries still in
activeList, and this loop ends up blocked in remove because there's
nothing for it to do. The application later closes all of the remaining
entries in the activeList, which doesn't cause anything to be enqueued on
the cleaner's queue, so the cleaner thread remains blocked in remove. But
now activeList is empty and will never be added to, and the queue is also
empty, and the thread is blocked in remove with nothing (other than the
timeout) to break it out.
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.
Got it, thanks.
I'd like to suggest a small update:
If the application explicitly calls clean() on all remaining Cleanables, there...
| // If the application cleans all remaining cleanables, there | ||
| // won't be any references enqueued to unblock this. Using a |
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.
Got it, thanks.
I'd like to suggest a small update:
If the application explicitly calls clean() on all remaining Cleanables, there...
|
Thanks for reviews. |
|
/integrate |
|
Going to push as commit 355b2f3.
Your commit was automatically rebased without conflicts. |
|
@kimbarrett Pushed as commit 355b2f3. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
Please review this revision of a previously puzzling comment intending to
provide the rationale for a bit of non-obvious code.
Progress
Issue
Reviewers
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/23952/head:pull/23952$ git checkout pull/23952Update a local copy of the PR:
$ git checkout pull/23952$ git pull https://git.openjdk.org/jdk.git pull/23952/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 23952View PR using the GUI difftool:
$ git pr show -t 23952Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/23952.diff
Using Webrev
Link to Webrev Comment