RFR: 8314225: SIGSEGV in JavaThread::is_lock_owned [v2]
David Holmes
dholmes at openjdk.org
Mon Jan 29 02:28:37 UTC 2024
On Fri, 26 Jan 2024 21:34:44 GMT, Kevin Walls <kevinw at openjdk.org> wrote:
>> JavaThread's _monitor_chunks member is temporary storage used by deoptimization.
>> When other threads inspect it using JavaThread::monitor_chunks(), if it is non-null that means a deoptimization is in progress, and the value will be removed shortly.
>>
>> There are a few places where we attempt to follow the MonitorChunk*, but that would only be valid if deopt is in progress, and only safe if we could know the deopt is not going to complete. But that the deopt will complete, and will free the MonitorChunks and clear the value. So this is rare but there is a race and a risk of following a MonitorChunk* as it gets freed, and crashing.
>
> Kevin Walls has updated the pull request incrementally with one additional commit since the last revision:
>
> ThreadsListHandle required for Handshake
I'm really not grokking this. What is the purpose of `monitor_chunks()`? If it is only non-null during de-opt then any examination of it outside of deopt is racy. Is the issue that once deopt is complete the monitors that would have been found in `monitor_chunks` will now be found elsewhere? If so then where?
-------------
PR Review: https://git.openjdk.org/jdk/pull/17566#pullrequestreview-1847735764
More information about the hotspot-dev
mailing list