(0.51) JEP491: Never Deflate Monitors and Synchronize virtualThreadWaitCount #21392
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, there are timing holes between
JVM_TakeVirtualThreadListToUnblock and monitor deflation. A monitor can
be deflated while it is being accessed in
JVM_TakeVirtualThreadListToUnblock. This leads to a NULL dereference
causing a segfault. Adding more synchronization will cause a
significant overhead in the object monitor exit path. Until an
efficient solution is developed, the policy to never deflate will be
employed in order to support JEP491. Since the current JEP491
implementation always inflates monitors before usage, deflating will be
counter-productive.
Also, added a null check for syncObjectMonitor in
JVM_TakeVirtualThreadListToUnblock to ensure that the monitor is
inflated before operations are performed on it.
Operations on J9ObjectMonitor's virtualThreadWaitCount field may
happen out of sequence. To ensure correct ordering and consistency,
atomics have been employed to modify this field.
Related: #20705
Backport of #21384