RFR [8038333] java/lang/ref/EarlyTimeout.java failed

Peter Levart peter.levart at gmail.com
Thu Mar 27 14:00:55 UTC 2014

On 03/27/2014 02:36 PM, Ivan Gerasimov wrote:
> Thank you Peter!
>> There could be a little delay (say half the timeout: 500ms) specified 
>> after main thread returns from the startedSignal.await(); and before 
>> setting referent = null; and doing System.gc(). This would decrease 
>> the chance that the reference is enqueued before EarlyTimeout threads 
>> enter queue.remove(1000), thus making the test more reliable in 
>> failing with unpatched code.
> Yes, you're right.
> I've checked the test against jdk9-b01 (no fix for 6853696 yet).
> It gives 2.5% of false negatives (i.e. in 5 out of 200 runs the 
> reference was enqueued before calling to remove()).
> With an additional delay of TIMEOUT / 2 this number dropped to 0%.
> With jdk9-b05 (with fix for 6853696) no false positives were shown 
> with or without this additional delay.
>> Now even if the referent is released and System.gc() is called, that 
>> does not guarantee that a WeakReference is going to be enqueued 
>> before the EarlyTimeout threads timeout and the result could as well 
>> be 0 collected references. To increase the chance that the reference 
>> is enqueued in a timely manner, main thread could, immediately after 
>> System.gc(), call:
>> SharedSecrets.getJavaLangRefAccess().tryHandlePendingReference();
>> (since SharedSecrets is in sun.misc protected package, 
>> JavaLangRefAccess instance would have to be obtained using reflection 
>> unfortunately).
> I would prefer not to complicate the test too much, if you don't mind. 
> I think the test already shows reliable reproducibility.
>>> I suggest to return to the very first trivial fix:
>>> http://cr.openjdk.java.net/~igerasim/8038333/1/webrev/
>> But this webrev *is moving startedSignal.await() after System.gc()* ...
> Oops, sorry. It was meant to be /8038333/*0*/webrev/, of course!
> Now, I updated the webrev with the additional delay as you suggested:
> http://cr.openjdk.java.net/~igerasim/8038333/2/webrev/
> Would you please have a look?

That looks good. So no warning if nonNullRefCount == 0 ... It is 
probably not particularly useful if nobody is going to look at it, right?

Regards, Peter

> Sincerely yours,
> Ivan

More information about the core-libs-dev mailing list