On Fri, 2008-02-01 at 16:45 -0500, Tim Julien wrote: > All, > > I have been looking into a stacktrace that has been coming up alot for > our users. This is on core 4.0 alpha 6 and client 4.0 alpha 2 (with > minor URI fixes). The stacktrace is at the bottom of the message. > > I haven't been able to reproduce it yet, however, in looking at the > httpcore / client code, I'm having some suspicions about > AbortableHttpRequest.abort(). I might also suspect > IdleConnectionHandler, but the code to add / remove connections to it > seems to look correct. > > If you are in middle of doing a client.execute(), and a different Thread > calls abort() (is this even allowed ... ?), the abort will close / > shutdown / null-out a bunch of state that leaves many Objects in an > illegal state. Since these objects are frequently asserted to be open / > non-null, this causes the client.execute() to throw IllegalStateException. > > Is any of these statements true: > * Do not call AbortableHttpRequest.abort() from a different Thread than > client.execute
No. AbortableHttpRequest#abort() is primarily meant to be called from a different thread > * client.execute() is supposed to throw IllegalStateExceptions when > another Thread calls AbortableHttpRequest.abort() on the request. No, it is not, but currently it does. I am working on a fix for the problem. > * client.execute is supposed to throw IOException OR > InterruptedException when another Thread calls > AbortableHttpRequest.abort() on the request. > Yes. > Of course, this stacktrace could have nothing to do with > AbortableHttpRequest.abort(). > > I reviewed the AbstractClientConnAdapter class I found it prone to all sorts of concurrency issues. I'll open a JIRA issue for it shortly Oleg > java.lang.IllegalStateException: No wrapped connection. > at > org.apache.http.impl.conn.AbstractClientConnAdapter.assertWrappedConn(AbstractClientConnAdapter.java:119) > at > org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:195) > at > org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) > at > org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) > at > org.apache.http.impl.client.DefaultClientRequestDirector.execute(DefaultClientRequestDirector.java:345) > at > org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:524) > at > org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:476) > at > org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:435) > 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) > > -Tim Julien > > --------------------------------------------------------------------- > 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]