RFR: 8197812: (ref) Data race in Finalizer

Peter Levart peter.levart at gmail.com
Wed Feb 14 11:01:43 UTC 2018



On 02/14/2018 11:49 AM, Peter Levart wrote:
> Hi Martin,
>
> On 02/14/2018 10:58 AM, Peter Levart wrote:
>>
>> I take back this claim. Of course the the following race is possible:
>>
>> - Thread1: calls runAllFinalizers and takes a Finalizer from 
>> 'unprocessed' list.
>> - Thread2: takee the same Finalizer instance from ReferenceQueue and 
>> calls runFinalizer()
>> - Thread1: calls runFinalizer() with the same instance for the 2nd 
>> time now.
>
> ... but this could be "fixed" if the taking of next Finalizer from 
> 'unfinalized' list and removing it from the same list was a single 
> atomic operation. What do you say of the following further 
> simplification:
>
> http://cr.openjdk.java.net/~plevart/jdk-dev/8197812_Data_race_in_Finalizer/webrev.01/ 
>

Even that has a flaw. Running the next unfinalized Finalizer from 
runAllFinalizers() does not prevent the same Finalizer to be returned 
from the ReferenceQueue. So the check must remain in place.

Sorry for this long monologue. I truly rest now.

Regards, Peter



More information about the core-libs-dev mailing list