<Sound Dev> Comment on bug JDK-8013586

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Thu Jan 8 03:51:07 UTC 2015


On 08.01.2015 1:13, Phil Race wrote:
> Its not clear to me if the bug description is implying an exception 
> was thrown
UnsupportedAudioFileException is thrown if the URL/File does not point 
to valid audio file data recognized by the specific reader, so 
AudioSystem will try to move to the next reader and a leak will occur.
Actually most of our readers are affected.
> Still, something like what you suggest seems to be needed.
right.
>
> The owner of this bug is out until next week so I'll let him comment 
> further
> after his return.
>
> -phil.
>
> On 01/07/2015 12:42 PM, Mike Clark wrote:
>> Hello all,
>>
>> I wanted to post this as a comment on 
>> https://bugs.openjdk.java.net/browse/JDK-8013586, but apparently 
>> getting comment access to that system is a bit of a hurdle. Anyway.  
>> What follows is, I believe, a fix for the aforementioned bug:
>>
>> There is a file handle leak in some of the subclasses of 
>> javax.sound.sampled.spi.AudioFileReader, such as 
>> com.sun.media.sound.WaveFloatFileReader.
>>
>> Consider com.sun.media.sound.WaveFloatFileReader's method:
>>
>> public AudioInputStream getAudioInputStream(File file)
>>         throws UnsupportedAudioFileException, IOException {
>>     return getAudioInputStream(
>>         new BufferedInputStream(new FileInputStream(file)));
>> }
>>
>> See how there is no attempt to close the FileInputStream if an 
>> exception is thrown?  A file handle will remain open on the file 
>> until garbage collection is run. Since garbage collection may never 
>> run, the file handle may remain open until the JVM exits. And on 
>> Windows the open file handle prevents the file from being deleted, 
>> which is problematic.
>>
>> Could we fix it by adding a try/catch block?
>>
>> public AudioInputStream getAudioInputStream(File file)
>>         throws UnsupportedAudioFileException, IOException {
>>     FileInputStream fis = null;
>>     try {
>>         fis = new FileInputStream(file);
>>         return getAudioInputStream(new BufferedInputStream(fis));
>>     } catch(IOException|UnsupportedAudioFileException e) {
>>         if (fis != null) {
>>             fis.close();
>>         }
>>         throw e;
>>     }
>> }
>>
>> These AudioFileReader subclass methods are usually called by 
>> javax.sound.sampled.AudioSystem.getAudioInputStream(File), which 
>> calls getAudioInputStream(File) on all registered subclasses of 
>> AudioFileReader.  As such, all subclasses of AudioFileReader in the 
>> JRE should be reviewed for this problem.
>>
>> best regards,
>> -Mike
>>
>


-- 
Best regards, Sergey.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/sound-dev/attachments/20150108/6d8452bf/attachment-0001.html>


More information about the sound-dev mailing list