You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by bu...@apache.org on 2003/04/30 19:52:46 UTC

DO NOT REPLY [Bug 19494] New: - StackOverflowError in HttpConnection

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=19494>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=19494

StackOverflowError in HttpConnection

           Summary: StackOverflowError in HttpConnection
           Product: Commons
           Version: 2.0 Beta 1
          Platform: PC
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: HttpClient
        AssignedTo: commons-httpclient-dev@jakarta.apache.org
        ReportedBy: bin.chen@sabre-holdings.com


When the HttpConnection#WrappedOutputStream.flush () encounters IOException 
druign write, it is calling HttpConnection.close which calls 
HttpConnection.closeSocketAndStreams and which eventually calls 
HttpConnection#WrappedOutputStream.flush again.  The circular calls will cause 
StackOverflowError.

I run into this accidentally when I was trying to extend HttpConnection.  But 
looking through the code, I believe any IOException may cause the same 
problem.  The circular calls should be either removed or controlled.  Below is 
part of teh stack trace

java.lang.StackOverflowError
        at java.lang.Exception.<init>(Unknown Source)
        at java.io.IOException.<init>(Unknown Source)
        at java.net.SocketException.<init>(Unknown Source)
        at java.net.SocketOutputStream.socketWrite(Native Method)
        at java.net.SocketOutputStream.write(Unknown Source)
        at org.apache.commons.httpclient.HttpConnection$WrappedOutputStream.writ
e(HttpConnection.java:1273)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.flush(Unknown Source)
        at java.io.FilterOutputStream.close(Unknown Source)
        at org.apache.commons.httpclient.HttpConnection.closeSocketAndStreams(Ht
tpConnection.java:1083)
        at org.apache.commons.httpclient.HttpConnection.close(HttpConnection.jav
a:1024)
        at org.apache.commons.httpclient.HttpConnection$WrappedOutputStream.hand
leException(HttpConnection.java:1235)
        at org.apache.commons.httpclient.HttpConnection$WrappedOutputStream.writ
e(HttpConnection.java:1275)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.flush(Unknown Source)
        at java.io.FilterOutputStream.close(Unknown Source)
        at org.apache.commons.httpclient.HttpConnection.closeSocketAndStreams(Ht
tpConnection.java:1083)
        at org.apache.commons.httpclient.HttpConnection.close(HttpConnection.jav
a:1024)
        at org.apache.commons.httpclient.HttpConnection$WrappedOutputStream.hand
leException(HttpConnection.java:1235)
        at org.apache.commons.httpclient.HttpConnection$WrappedOutputStream.writ
e(HttpConnection.java:1275)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.flush(Unknown Source)
        at java.io.FilterOutputStream.close(Unknown Source)
        at org.apache.commons.httpclient.HttpConnection.closeSocketAndStreams(Ht
tpConnection.java:1083)
        at org.apache.commons.httpclient.HttpConnection.close(HttpConnection.jav
a:1024)
        at org.apache.commons.httpclient.HttpConnection$WrappedOutputStream.hand
leException(HttpConnection.java:1235)
        at org.apache.commons.httpclient.HttpConnection$WrappedOutputStream.writ
e(HttpConnection.java:1275)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.flush(Unknown Source)
        at java.io.FilterOutputStream.close(Unknown Source)
        at org.apache.commons.httpclient.HttpConnection.closeSocketAndStreams(Ht
tpConnection.java:1083)
        at org.apache.commons.httpclient.HttpConnection.close(HttpConnection.jav
a:1024)
        at org.apache.commons.httpclient.HttpConnection$WrappedOutputStream.hand
leException(HttpConnection.java:1235)
        at org.apache.commons.httpclient.HttpConnection$WrappedOutputStream.writ
e(HttpConnection.java:1275)