RFR JDK-8185582, Update Zip implementation to use Cleaner, not finalizers

mandy chung mandy.chung at oracle.com
Fri Sep 29 20:54:02 UTC 2017



On 9/29/17 1:49 PM, Remi Forax wrote:
>> On 9/27/17 2:31 AM, Peter Levart wrote:
>>> Up to a point where 'this' is dereferenced to obtain the 'zsRef' value
>>> (line 261), the Deflater instance is reachable. But after that, even
>>> ensureOpen() may be inlined and 'this' is not needed any more. After
>>> that point, obtaining zsRef.address() and calling setDictionaly on the
>>> obtained address may be racing with Cleaner thread invoking
>>> ZStreamRef.run():
>> What about making the native setDictionary method as an instance method
>> (currently it's a static method) so that this object remains strongly
>> reachable until the method returns?
> Mandy,
> unlike in C or C++, in Java a reference is garbage collected as soon as you do not need it anymore,
> so using an instance method will not change the issue here.
>

The case that Peter observed is when "this" is being optimized out and 
becomes unreachable before setDictionary is called.  Since setDictionary 
is a JNI function, the caller has to pass this (as jobject) to the 
native function.   Would that cover this special case?

Mandy


More information about the core-libs-dev mailing list