Hi Mandy,
True in advertising, the FileDescriptor.close() method should be
declared to throw IOException.
Cleanup via the Cleaner.clean() method can't throw a checked exception
but the IOException can be
wrapped with UncheckedIOException that can be caught by Cleaner.clean()
callers.
They can unwrap the exception as needed.
When invoked from the Cleaner thread, all exceptions are ignored.
Perhaps that is a better place to log unexpected exceptions.
Roger
On 10/12/2017 2:00 PM, mandy chung wrote:
On 10/4/17 7:35 AM, Roger Riggs wrote:
Updated the webrev in place:
http://cr.openjdk.java.net/~rriggs/webrev-fis-cleanup-8080225/
Looks good. One minor comment:
251 private static native void cleanupClose0(int fd);
75 Java_java_io_FileDescriptor_cleanupClose0(JNIEnv *env, jclass
fdClass, jint fd) {
76 if (close(fd) == -1) {
77 JNU_ThrowIOExceptionWithLastError(env, "close failed");
78 }
79 }
The native implementation throws IOException when there is any error.
Not directly related to this change: when there is any error in
closing FIS/FOS, the exception will be ignored by the cleaner. I
wonder if we could enhance the Cleaner's diagnosability to log any
exception thrown; of course this is a separate RFE that might have
been considered.
Mandy