Grigory Fadeev created IO-469:
---------------------------------

             Summary: "Self-suppression not permitted" while using BrokenOutput 
and BrokenInput streams with try-with-resource. 
                 Key: IO-469
                 URL: https://issues.apache.org/jira/browse/IO-469
             Project: Commons IO
          Issue Type: Bug
          Components: Streams/Writers
    Affects Versions: 2.4
         Environment: Oracle JVM 1.8_25 (but should be reproducible starting 
from Java 7).
            Reporter: Grigory Fadeev
            Priority: Trivial


Hi,
First of all thanks a lot for great library :)
 
I faced with "Self-suppression not permitted" issue while using 
BrokenInputStream & BrokenOutputStream classes with try-with-resources. 

Root cause of this issue is that these classes always throws same exception 
instance for all methods.
That's how it looks like when javac unfolds try-with-resources: 
{code:java}
        InputStream is = new BrokenInputStream();
        Throwable localThrowable2 = null;
        try {
            is.read();
        } catch (Throwable localThrowable1) {
            localThrowable2 = localThrowable1;
            throw localThrowable1;
        } finally {
            if (is != null) {
                if (localThrowable2 != null) {
                    try {
                        is.close();
                    } catch (Throwable x2) {
                        localThrowable2.addSuppressed(x2);
                    }
                } else {
                    is.close();
                }
            }
        }
{code}
So as you can see when close method is invoked resulting exception will be 
added to itself (first time thrown during read method), this leads to 
IllegalArgumentException "Self-suppression not permitted".

It can be easily fixed by omitting throwing of same exception instance for 
close method. 
If you don't mind I would attach patch which will fix this issue.  



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to