RFR: JDK-8168141: javax/management/remote/mandatory/notif/EmptyDomainNotificationTest.java: No notif received!

David Holmes david.holmes at oracle.com
Tue Nov 8 11:23:52 UTC 2016


On 8/11/2016 8:44 PM, Robbin Ehn wrote:
> Hi Ujwal,
>
> synchronized(li) {
>     while (li.received < 1) {
>         li.wait(100);
>     }
> }
>
> I don't see why we need while loop ?

You should always perform a wait() in a loop checking the condition that 
is being waited upon. This guards against lost-notifications and also 
spurious wakeups.

> To me it looks like you could just do:
>
> synchronized(li) {
>     li.wait();
> }
>
> Since either we got notification and received must be bigger than 0.
> Or jtreg timed out.

If the notifyAll() happened before you get here then you will wait() 
until jtreg does time you out - even though the notification correctly 
occurred.

That said, in this particular case doing a timed-wait achieves nothing 
other than waking the thread so that it can go back to waiting again. 
The "received" value will only change when a notifyAll occurs so there 
is no need to poll it (unless aborting due to a timeout as per the 
previous version).

Because the loop will never exit, unless the thread is interrupted, this 
subsequent code has no affect:

112         if (li.received < 1) {
113             throw new RuntimeException("No notif received!");

David
-----

> /Robbin ('r'eviewer)
>
> On 11/04/2016 12:03 PM, Ujwal Vangapally wrote:
>> Please review this small change for the bug below
>>
>> https://bugs.openjdk.java.net/browse/JDK-8168141
>>
>> Webrev:
>> http://cr.openjdk.java.net/~asapre/sponsorships/Ujwal/JDK-8168141/webrev.01/
>>
>>
>>
>> Thanks,
>> Ujwal.


More information about the serviceability-dev mailing list