RFR: 8366659: ObjectMonitor::wait() liveness problem with a suspension request [v26]
Patricio Chilano Mateo
pchilanomate at openjdk.org
Wed Jan 21 05:05:58 UTC 2026
On Tue, 20 Jan 2026 20:59:57 GMT, David Holmes <dholmes at openjdk.org> wrote:
>> I've tracked that comment back to this very old changeset:
>>
>>
>> $ git log 22929fb78f46^!
>> commit 22929fb78f4606f726b652a25772980336398575
>> Author: Karen Kinnear <acorn at openjdk.org>
>> Date: Fri Oct 22 15:59:34 2010 -0400
>>
>> 6988353: refactor contended sync subsystem
>>
>> Reduce complexity by factoring synchronizer.cpp
>>
>> Reviewed-by: dholmes, never, coleenp
>
> I think Dan is right that this has changed the behaviour by deciding `was_notified` earlier in the process. Now this check:
>
> 1882 if (interrupted || HAS_PENDING_EXCEPTION) {
> 1883 was_notified = false;
>
> will supercede the fact we could actually have been notified. And that is a problem because if the current was notified but now throws InterruptedException then we lose the notification. I think my suggestion to set `was_notified` at 1883 was wrong - we need to undo that.
>
> The key point is that if we unlink ourselves then we were definitely not notified; otherwise we must have been.
Might be clearer to move `bool was_notified = true;` right before the branch at L1908 where we determine if there was a notification or not.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/27040#discussion_r2710950713
More information about the hotspot-runtime-dev
mailing list