HttpMethodDirector.executeWithRetry method fails to close the underlying 
connection if a RuntimeException is thrown
-------------------------------------------------------------------------------------------------------------------

                 Key: HTTPCLIENT-616
                 URL: http://issues.apache.org/jira/browse/HTTPCLIENT-616
             Project: HttpComponents HttpClient
          Issue Type: Bug
    Affects Versions: 3.1 Beta 1
         Environment: All
            Reporter: Jason Bird


The following code snippet is from the end of the 
HttpMethodDirector.executeWithRetry method:

        } catch (IOException e) {
            if (this.conn.isOpen()) {
                LOG.debug("Closing the connection.");
                this.conn.close();
            }
            releaseConnection = true;
            throw e;
        } catch (RuntimeException e) {
            if (this.conn.isOpen) {                                             
<<<===========================   BAD!  :-)
                LOG.debug("Closing the connection.");
                this.conn.close();
            }
            releaseConnection = true;
            throw e;
        }

When an IOException is caught, you can see that the "open" status of the 
connection is accurately checked by calling the "isOpen()" method.

When a RuntimeException is caught, however, the code mistakenly checks only the 
"isOpen" member field.  In the case where "conn" is, for example, a 
MultiThreadedHttpConnectionManager, the "isOpen()" method is overridden to 
check for a wrapped connection and returns the "isOpen" status of that 
connection.  In cases like that checking the "isOpen" member field is obviously 
wrong and we end up not calling "close()" and the connection is not cleaned up. 
 This causes issues with later calls.

A very difficult bug to diagnose and <steps up on soapbox> one that could have 
been easily avoided by making member variables private! <steps down>  thank 
you.  :-)




-- 
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

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to