RFR: 8328866: Add raw monitor rank support to the debug agent. [v4]

Chris Plummer cjplummer at openjdk.org
Wed May 8 22:55:54 UTC 2024


On Wed, 8 May 2024 22:40:26 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:

>> If the following are all true 
>> - you are entering is a leaf monitor
>> - the current thread has already entered a leaf monitor
>> - the rank of the monitor you are entering is lower than the rank of the monitor already held
>> 
>> Then you have both a rank order violation and a violation for entering a leaf monitor when you have already entered a leaf monitor. My current implementation will complain about the rank violation (although can easily be made to instead complain about the leaf violation or complain about both). Yours will complain about the leaf violation.  To make yours instead complain about the rank violation, the first loop needs to also check all the leaf monitors. Since the 2nd loop also checks all the leaf monitors (but for a different reason), this means iterating over the leaf monitors twice. Complaining about both violations would also require iterating over the leaf monitors twice.
>
> Okay, thanks.
>> Then you have both a rank order violation and a violation for entering a leaf monitor when you have already entered a leaf monitor. 
> 
> I kind of disagree with the second part of this statement.
> My understanding is that the second loop does a little bit different check:
>   "Violation for entering ANY monitor when you have already entered a leaf monitor."
> Please, note that `rank` can be any rank including those with conditions:
> 
>    rank < FIRST_LEAF_DEBUG_RAW_MONITOR
>    rank >= FIRST_LEAF_DEBUG_RAW_MONITOR
> 
> It seems to me that if the second rule (in my edition) is violated then the first rule does not matter.
> It means that the first rule is for both ranks from the range:
> 
>    0 <= rank < FIRST_LEAF_DEBUG_RAW_MONITOR
>  ```

Yes, the 2nd loop is a different check. That's why I said it also checks all the leaf monitors "but for a different reason".  Your two loops do not flag a rank violation if both monitors are leafs, even if grabbed in the wrong order. It only flags the leaf violation. Your two checks will always catch any violation, it just a matter of whether my example (which is both a leaf and a rank violation) is flagged as a leaf violation or a rank violation (or even both could be indicated if we choose). Yours flags it as a leaf violation. My code flags it as a rank violation. Mine could flag both violations without any additional iterations. Your would need to iterate over the leaf monitors twice to detect if there is both a rank and a leaf violation.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/19044#discussion_r1594784168


More information about the serviceability-dev mailing list