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