RFR: 8066859: java/lang/ref/OOMEInReferenceHandler.java failed with java.lang.Exception: Reference Handler thread died

Doug Lea dl at openjdk.org
Mon Jul 11 15:02:11 UTC 2022


On Mon, 11 Jul 2022 04:10:49 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> 8066859 : java/lang/ref/OOMEInReferenceHandler.java failed with java.lang.Exception: Reference Handler thread died
>
> src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java line 296:
> 
>> 294:         byte spins = 0, postSpins = 0;   // retries upon unpark of first thread
>> 295:         boolean interrupted = false, first = false;
>> 296:         Node pred = null, t;             // predecessor of node when enqueued
> 
> Nit: please don't use this style of multi-variable declaration as they are very easy to mis-read. Also the comment only applies to one of the variables.

OK, changed.

> src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java line 1626:
> 
>> 1624:             }
>> 1625:             if (!isHeldExclusively() || !release(savedState = getState()))
>> 1626:                 throw LockSupport.staticIllegalMonitorStateException; // OOM
> 
> How is it possible to get IMSE this deep into the code? And the comment is confusing - OOM?

Clarified to:
            // fall through if encountered OutOfMemoryError
            if (!isHeldExclusively() || !release(savedState = getState()))
                throw LockSupport.staticIllegalMonitorStateException;

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

PR: https://git.openjdk.org/jdk/pull/9427


More information about the core-libs-dev mailing list