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

Reply via email to