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] Commented: (HARMONY-40) FileChannel assotiated with FileOutputStream not closed after closing output stream
Date Wed, 25 Jan 2006 06:58:13 GMT
The patch does work in some case, but it is not enough.

First, when the channel is closed, the relevant stream(FileInputStream, 
FileOutputStream or RandomAccessFile) also needs to closed. So only add 
codes to the FileOutputStream is not enough.

Second, the FileOutputStream/FileInputStream will close itself in the 
finalize() method(as Java spec says), and with your patch, current 
implementation in Harmony will close the channel at that time, too. This 
is very dangerous, because if someone writes code like below, the fos 
may be garbage collected and closed, and channel will also be closed, so 
that the following operation on channel will throw unexpected exception.
<code>
.....
FileChannel channel = null;
try{
    FileOutputStream fos = new FileOutputStream("somefile.txt", false);
    channel = fos.getChannel();
}catch(Exception e){
}
/*continue operate on channel*/
.....
</code>

Third, the native close operation should only be executed once, so that 
some synchronization mechanism on the channel and stream should be 
introduced, which should also avoid deadlock when one thread is calling 
fos.close() while the other is calling channel.close().

As a conclusion, the close issue is yet another reason that the three 
classes IO package need to be refactored to based on same JNI interface 
with FileChannel. Pls. refer to my work on JIRA issue #42.

Vladimir Strigun (JIRA)
>     [ http://issues.apache.org/jira/browse/HARMONY-40?page=comments#action_12363705 ]

>
> Vladimir Strigun commented on HARMONY-40:
> -----------------------------------------
>
> Forced close of file current file channel in file output stream can be added (diff for
current FileOutputStream)
> 173a174,177
>   
>>               if (channel != null) {
>>                       channel.close();
>>                       channel = null;
>>               }
>>     
>
>   
>> FileChannel assotiated with FileOutputStream not closed after closing output stream
>> -----------------------------------------------------------------------------------
>>
>>          Key: HARMONY-40
>>          URL: http://issues.apache.org/jira/browse/HARMONY-40
>>      Project: Harmony
>>         Type: Bug
>>   Components: Classlib
>>     Reporter: Vladimir Strigun
>>     
>
>   
>> When I receive FileChannel from file output stream, write something to stream and
then close it, channel, assotiated with the stream is still open. I'll attach unit test for
the issue.
>>     
>
>   


-- 
Paulex Yang
China Software Development Lab
IBM



Mime
View raw message