RFR 8080225: FileInputStream cleanup should be improved
mandy chung
mandy.chung at oracle.com
Tue Oct 3 23:17:17 UTC 2017
Hi Roger,
This looks good overall.
53 * unreachable should explicitly override {@link #finalize} and call
{@code close}.
Since finalize is deprecated, I would not recommend to have the subclass
adding the finalize method. I suggest to take that phrase out (I gave a
similar comment to JDK-8185582 [1]). Users should use
try-with-resource or register the instances in a cleaner.
As for the tests, FinalizeShdCallClose.java implements finalize. I
think it'd be good to convert them to try-with-resource.
I'm not close to java.io implementation. Would registerCleanup be
called more than once? line 220 in the registerCleanup will create a new
cleanup if it's invoked the second time - is it intentional?
216 synchronized void registerCleanup() {
217 if (cleanup != null) {
218 cleanup.clear();
219 }
220 cleanup = FDCleanup.create(this);
221 } thanks Mandy
[1]
http://mail.openjdk.java.net/pipermail/core-libs-dev/2017-September/049362.html
On 9/29/17 10:17 AM, Roger Riggs wrote:
> Replacing finalizers in FileInputStream, FileOutputStream, and adding
> cleanup to RandomAccessFile
> and NIO File Channels with Cleaner based implementations required
> changes to FileDescriptor.
>
> The specification of FileInputStream and FileOutputStream is changed
> to remove the finalizer
> behavior that required their respective close methods to be called.
> This change to the behavior is tracked with CSR 8187325 [3].
>
> The FileDescriptor implementations (Unix and Windows) provide a
> cleanup function that is now used by
> FIS, FOS, RAF, and async and normal FileChannels. Each requests
> FileDescriptor to register a cleanup function
> when the fd or handle is assigned and delegates to
> FileDescriptor.close. If the respective
> FileDescriptor.close method is not called, the fd or handle will be
> closed when the FileDescriptor
> is determined to be phantom reachable.
>
> The other uses of FileDescriptor are not intended to be changed, for
> example in sockets and datagrams.
>
> Some tests were modified to not rely on finalization; new tests are
> provided.
>
> Comments are appreciated on both the CSR [3] and the implementation [1].
>
> [1] webrev:
> http://cr.openjdk.java.net/~rriggs/webrev-fis-cleanup-8080225/
>
> [2] Issue: https://bugs.openjdk.java.net/browse/JDK-8080225
>
> [3] CSR: 8187325 FileInputStream/FileOutputStream should use the
> Cleaner instead of finalize
> https://bugs.openjdk.java.net/browse/JDK-8187325
>
> Thanks, Roger
>
>
More information about the core-libs-dev
mailing list