On 2/14/18 1: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.
runAllFinalizers is invoked during shutdown when
System.runFinalizersOnExit has been called.
I have been wanting to remove System::runFinalizersOnExit [1] which is
the culprit of causing this complicated handling. Probably time to
remove it in 11?
Mandy
[1]
http://mail.openjdk.java.net/pipermail/core-libs-dev/2015-January/031041.html