harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paulex Yang <paulex.y...@gmail.com>
Subject Re: [jira] Created: (HARMONY-479) java.io.FileInputStream and FileOutputStream might cause Finalizer thread suspending
Date Tue, 23 May 2006 02:12:19 GMT
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) <jira@apache.org>:
>>
>> 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
>>
>>
>
>


-- 
Paulex Yang
China Software Development Lab
IBM



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Mime
View raw message