[ https://issues.apache.org/jira/browse/HTTPCLIENT-741?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12568418#action_12568418 ]
Sam Berlin commented on HTTPCLIENT-741: --------------------------------------- I don't seem to have the ability to re-open, so am just commenting with the updates. We released a new beta today, and 99% of the concurrency problems seem to be fixed. Here's three stack traces that are left: -- java.lang.IllegalStateException: Connection is not open at org.apache.http.impl.SocketHttpClientConnection.assertOpen(SocketHttpClientConnection.java:75) at org.apache.http.impl.AbstractHttpClientConnection.isStale(AbstractHttpClientConnection.java:197) at org.apache.http.impl.conn.AbstractClientConnAdapter.isStale(AbstractClientConnAdapter.java:172) at org.apache.http.impl.client.DefaultClientRequestDirector.execute(DefaultClientRequestDirector.java:318) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:500) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:455) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:421) at com.limegroup.gnutella.http.DefaultHttpExecutor.performRequest(DefaultHttpExecutor.java:97) at com.limegroup.gnutella.http.DefaultHttpExecutor.access$000(DefaultHttpExecutor.java:26) at com.limegroup.gnutella.http.DefaultHttpExecutor$MultiRequestor.run(DefaultHttpExecutor.java:139) at org.limewire.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1006) at org.limewire.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:549) at java.lang.Thread.run(Unknown Source) --- java.lang.NullPointerException at org.apache.http.impl.client.DefaultClientRequestDirector.updateAuthState(DefaultClientRequestDirector.java:996) at org.apache.http.impl.client.DefaultClientRequestDirector.handleResponse(DefaultClientRequestDirector.java:885) at org.apache.http.impl.client.DefaultClientRequestDirector.execute(DefaultClientRequestDirector.java:386) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:500) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:455) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:421) at com.limegroup.gnutella.http.DefaultHttpExecutor.performRequest(DefaultHttpExecutor.java:97) at com.limegroup.gnutella.http.DefaultHttpExecutor.access$000(DefaultHttpExecutor.java:26) at com.limegroup.gnutella.http.DefaultHttpExecutor$MultiRequestor.run(DefaultHttpExecutor.java:139) at org.limewire.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1006) at org.limewire.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:549) at java.lang.Thread.run(Unknown Source) --- java.lang.IllegalStateException: No entry created for this pool. HttpRoute[{}->http://74.160.66.42:14561] at org.apache.http.impl.conn.tsccm.RouteSpecificPool.freeEntry(RouteSpecificPool.java:137) at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.freeEntry(ConnPoolByRoute.java:337) at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.releaseConnection(ThreadSafeClientConnManager.java:230) at org.apache.http.impl.client.DefaultClientRequestDirector.execute(DefaultClientRequestDirector.java:427) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:500) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:455) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:421) at com.limegroup.gnutella.http.DefaultHttpExecutor.performRequest(DefaultHttpExecutor.java:97) at com.limegroup.gnutella.http.DefaultHttpExecutor.access$000(DefaultHttpExecutor.java:26) at com.limegroup.gnutella.http.DefaultHttpExecutor$MultiRequestor.run(DefaultHttpExecutor.java:139) at org.limewire.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1006) at org.limewire.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:549) at java.lang.Thread.run(Thread.java:613) --- DefaultHttpExecutor$MultiRequestor basically is just a Runnable / Cancellable [exposes a cancel() method] that can be cancelled from any thread. cancel just calls abort() on the current AbortableHttpRequest, but is called on a thread other than the one that's doing the client.execute(request). The last one is the most common exception, and seems to happen with some regularity. The other two we've only seen once, so may just be a memory quirk (we've seen some crazy bugs, including recursive NPEs while constructing an NPE.) > AbstractClientConnAdapter prone to concurrency issues > ----------------------------------------------------- > > Key: HTTPCLIENT-741 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-741 > Project: HttpComponents HttpClient > Issue Type: Bug > Components: HttpConn > Affects Versions: 4.0 Alpha 2 > Reporter: Oleg Kalnichevski > Priority: Critical > Fix For: 4.0 Alpha 3 > > > AbstractClientConnAdapter is currently prone to all sorts of concurrency > issues. (1) Access to internal state is not properry synchronized making the > class prone to race conditions. Presently none of the instance variables is > even declared volatile. (2) AbstractClientConnAdapter treats aborted > connection as one in an illegal state, which is not quite right. > Oleg -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]