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]