FYI exceptions thrown during a finalize method end the execution of that method, but otherwise are ignored by the finalizer.
Regards, Tim Paulex Yang wrote: > Gregory, > > Sorry I response so late. I just back from a long vacation and it took > me longer time than I expected to catch up the mailing list (after all, > it's very active!). Please see my comments below. > > Gregory Shimansky wrote: >> Hello Paulex >> >> I have a question about this problem. Do you know how exception in >> finalizer >> method affects the finalizer thread that it becomes suspended? I thought >> that when calling finalize method the code should catch all exceptions >> thrown by it and ignore them. AFAIK that's how finalizers are >> implemented in >> DRLVM. It specification it is written that > First of all, I think this issue should not happen if the spec of > FileInputStream/OutputStream doesn't require the implementation to > invoke close() in finalize() method, IMHO, generally it's not good > practice to depend on finalize(), and I guess this spec is inherited > from very early version, say, JDK 1.0, when the channel hasn't been not > introduced. > > And actually I don't know exactly what happened to the finalizer thread > when the NullPointerException thrown, because, as you know, the Harmony > VME provided by IBM is only binary. What I saw is that the debugger > sometimes stops on the suspending finalizer thread at the > FileInputStream/OutputStream's close(), and the message shows that > "NullPointerException caused suspending"(maybe not exact words, but very > similar). So I tried to fix this problem in Java codes. > > And I'd glad to have a try on DRLVM later, but anyway, I think it is > not bad idea to make our classlib codes more defensive and reliable. > your ideas? >> >> "If an uncaught exception is thrown by the finalize method, the >> exception is >> ignored and finalization of that object terminates." >> >> 2006/5/19, Paulex Yang (JIRA) <[EMAIL PROTECTED]>: >>> >>> java.io.FileInputStream and FileOutputStream might cause Finalizer >>> thread >>> suspending >>> >>> ------------------------------------------------------------------------------------ >>> >>> >>> Key: HARMONY-479 >>> URL: http://issues.apache.org/jira/browse/HARMONY-479 >>> Project: Harmony >>> Type: Bug >>> >>> Components: Classlib >>> Reporter: Paulex Yang >>> >>> >>> If one FileInputStream instance is not constructed properly, say, the >>> given file doesn't exist, the constructor will throw exception but the >>> FileInputStream instance is still necessary to be garbage collected, >>> and the >>> spec of FileInputStream's finalize() method requires that close() >>> must be >>> invoked, but the current implementation of FileInputStream.close()(as >>> below) will causes NullPointerException in Finalizer thread because >>> channel >>> field has not been initialized yet. >>> >>> public void close() throws IOException { >>> synchronized (channel) { >>> synchronized (this) { >>> if (channel.isOpen() && fd.descriptor >= 0) { >>> channel.close(); >>> } >>> fd.descriptor = -1; >>> } >>> } >>> } >>> >>> This issue applies to FileOutputStream, too. Test case below can >>> reproduce >>> this issue only in debugger, because it is not easy to get the handle of >>> Finalizer thread. Debugging the test case to the statement following the >>> System.gc(), the debugger will show that the Finalizer thread is >>> suspended >>> due to NullPointerException. >>> >>> >>> public class FileInputStreamTest { >>> public static void main(String[] args) throws Exception{ >>> FileInputStream is = null; >>> try{ >>> is = new FileInputStream(new File("nonexist")); >>> }catch(Exception e){ >>> System.gc(); >>> e.printStackTrace(); >>> } >>> } >>> } >>> >>> >>> >>> >>> -- >>> This message is automatically generated by JIRA. >>> - >>> If you think it was sent incorrectly contact one of the administrators: >>> http://issues.apache.org/jira/secure/Administrators.jspa >>> - >>> For more information on JIRA, see: >>> http://www.atlassian.com/software/jira >>> >>> >> >> > > -- Tim Ellison ([EMAIL PROTECTED]) IBM Java technology centre, UK. --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]