RFR 8195059: Update java.net Socket and DatagramSocket implementations to use Cleaner
Peter Levart
peter.levart at gmail.com
Fri Feb 2 18:16:31 UTC 2018
Hi Roger,
Nice separation of concerns (io vs. net).
Is JavaIOFileDescriptorAccess.registerCleanup(FileDescriptor) currently
used at all?
Although not necessary for this patch, but to make code more symmetric,
FileDecriptor.FDCleaner could also be extracted into a package-private
top class and equipped with similar static (un)registration methods as
SocketCleanable (possibly also renamed to FileCleanable and made hosting
the native method). You could then remove the overload of
FileDescriptor.registerCleanup() and corresponding
JavaIOFileDescriptorAccess method and make calling code use
FileCleanable.(un)register methods instead. You could then add checking
for non-nullness of PhantomCleanable in
FileDescriptor.registerCleanup(PhantomCleanable) or make the null value
behave as unregisterCleanup() so that you only need one method.
Currently if you mistakenly pass null to this method from socket code,
FDCleanup gets registered.
As FileDescriptor is a public class, you could also make FileCleanable
and SocketCleanable extend PhantomCleanable<FileDescriptor> and make the
method have the following signature
FileDescriptor.registerCleanup(PhantomCleanable<FileDescriptor>).
The code is good as is, but it's a little harder to follow since it is
different for two similar use cases (net vs. io).
What do you think?
Regards, Peter
On 02/02/18 18:07, Roger Riggs wrote:
> Hi Chris,
>
> Updated in place.
> http://cr.openjdk.java.net/~rriggs/webrev-net-cleanup-8195059/
>
> Thanks, Roger
>
>
> On 2/2/2018 11:30 AM, Chris Hegarty wrote:
>> Roger,
>>
>> On 01/02/18 21:29, Roger Riggs wrote:
>>> Hi Chris,
>>>
>>> Thanks for the review and suggestion.
>>>
>>> Webrev updated:
>>> http://cr.openjdk.java.net/~rriggs/webrev-net-cleanup-8195059/
>>
>> This looks good to me, just a few small comments:
>>
>> 1) windows SocketImpl.c in the comments:
>> java_net_AbstractPlainSocketImpl ->
>> java_net_SocketCleanable_cleanupClose0
>>
>> 2) SocketCleanable.java needs a copyright header
>>
>> -Chris.
>>
>>> * Refactored SocketCleanup into a java.net package private
>>> SocketCleanable
>>> * Moved register and unregister into static methods in
>>> SocketCleanable
>>> * Simplified the test by retaining the checking for GC reclaimed
>>> objects but
>>> removed checking fd counts, since they were unreliable in testing
>>> and not consistent across OS's
>>>
>>> Thanks, Roger
>>>
>>> On 2/1/2018 10:11 AM, Chris Hegarty wrote:
>>>> Hi Roger,
>>>>
>>>>> On 31 Jan 2018, at 15:52, Roger Riggs<Roger.Riggs at oracle.com> wrote:
>>>>>
>>>>> Addingnet-dev at openjdk.java.net
>>>>>
>>>>> On 1/30/2018 5:08 PM, Roger Riggs wrote:
>>>>>> Please review changes to replace finalizers in socket, datagram,
>>>>>> and multicast networking
>>>>>> with Cleaner based release of the raw file descriptors. Each
>>>>>> FileDescriptor is registered
>>>>>> for cleanup after the raw fd (or handle) is assigned. Normal
>>>>>> calls to close unregister the
>>>>>> cleaner before using the current logic to close the raw
>>>>>> fd/handle. Windows networking
>>>>>> uses fd's with the Windows socket_ API requiring a special cased
>>>>>> Cleanable.
>>>>>>
>>>>>> The tests check that the implementation objects including
>>>>>> FileDescriptors are reclaimed
>>>>>> and for Linux that the raw fd counts are reduced as expected.
>>>>>>
>>>>>> Webrev:
>>>>>> http://cr.openjdk.java.net/~rriggs/webrev-net-cleanup-8195059/
>>>> I think this is good. One small comment; could SocketCleanup be a
>>>> top-level package-private class, since it is shared by the three
>>>> different socket types.
>>>>
>>>> I didn’t look too hard at the tests, other than to note that they seem
>>>> to verify expected behaviour, which is good.
>>>>
>>>> -Chris.
>>>
>
More information about the core-libs-dev
mailing list