On Thu, 11 Dec 2025 03:48:58 GMT, Leonid Mesnik <[email protected]> wrote:

>> Serguei Spitsyn has updated the pull request incrementally with one 
>> additional commit since the last revision:
>> 
>>   review: use ReentrantLock.hasQueuedThread()
>
> test/hotspot/jtreg/serviceability/jvmti/vthread/ThreadListStackTracesTest/ThreadListStackTracesTest.java
>  line 49:
> 
>> 47:     public void ensureReadyAndWaiting(Thread vt, Thread.State expState, 
>> ReentrantLock rlock) {
>> 48:         // wait while the thread is not ready or thread state is 
>> unexpected
>> 49:         while (!threadReady || (vt.getState() != expState) || 
>> !rlock.hasQueuedThreads()) {
> 
> Small nit. 
> The comment is incomplete. And code duplication is unneded. 
> 
> You can make  
> 
> 
> task.ensureReady(vt, expState);
> // Ensure that thread waiting on the rlock
> while (!rlock.hasQueuedThreads()) {   
>   sleep(1);
> }
> 
> to reduce code duplication. 
> 
> Really,
> 
> task.ensureReady(vt, expState);
> 
> Shouldn't be needed. We can't have lock.hasQueuedThreads() == true until
> we update `threadReady` and hit  `vt.getState()`. 
> But I think it is fine to check all conditions.

Thank you. I was thinking about the same but decided to go and introduce new 
check method.
First, the check for `rlock.hasQueuedThreads()` seems to be good enough even 
without `ensureReady()` call. But it is hard to be sure it is the case. Second, 
the check to `ensureReady()` can be returned early without waiting on the 
`rlock`. In such a case, we have to rely on the `rlock.hasQueuedThreads()` 
which does not check the target thread state. Also, the code duplication is 
small but it is more clean and reliable way to check the needed condition.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28734#discussion_r2609112411

Reply via email to