On Thu, 2012-08-30 at 12:02 -0700, Jonathan Burke wrote: > Hello, > > > Perhaps it's low priority since the comments of > BasicClientConnectionManager.java does say it ought to be handled by > only one thread but I would like to point out that it is not thread > safe with respect to shutdown in case you're interested. > > > The attached file includes a test I added to > httpclient/src/test/java/org/apache/http/impl/conn/TestBasicConnManager.java > that will demonstrate a null pointer exception raised by potentially improper > synchronization in BasicClientConnectionManager in relatively short order. > > > Problem: > Since the assignment to variable shutdown in the shutdown method (line > 262) is not part of the synchronize block and none of the > assertNotShutdown method calls are within the synchronized blocks of > their enclosing methods, it is possible to have threads execute the > commands of BasicClientConnectionManager methods in the following > sequence. > > > Thread 1 > releaseConnection (or some other method that uses assertNotShutdown is > called) > assertNotShutdown - Passes - Line 183 > > > Thread 2 > shutdown > the shutdown flag becomes true - Line 262 > shutdown releases this.poolEntry and this.conn in the > synchronized(this) block > > Thread 1 > release connection's synchronized(this) block get's executed > this.poolEntry is null in the try block causing a null pointer > exception - Line 211 > this.poolEntry is null in the finally block causing a null pointer > exception - Line 224 > > Attached is a test case that will generate the attached stack-trace > when added to TestBasicConnManager and a possible fix (though the fix > has a cost of increased synchronization). > > > Thank you for your time. > > > Jonathan
Jonathan Could you please raise a JIRA for this defect and attach the files to it? Oleg > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
