On Wed, 2013-01-30 at 12:28 +0000, James Shaw wrote: > On 30 January 2013 12:26, Oleg Kalnichevski <[email protected]> wrote: > > On Wed, 2013-01-30 at 12:07 +0000, James Shaw wrote: > >> On 30 January 2013 11:54, Oleg Kalnichevski <[email protected]> wrote: > >> > On Wed, 2013-01-30 at 11:22 +0000, James Shaw wrote: > >> >> I'm having some trouble tracking this down, but I believe that > >> >> httpclient 4.2.3 is clearing the interrupt flag. > >> >> > >> >> My code looks like this: > >> >> > >> >> executorService.submit(new Runnable() { > >> >> @Override public void run() { > >> >> while (!Thread.currentThread().isInterrupted()) { > >> >> consume(); // calls AWS SDK which uses Apache HttpClient > >> >> } > >> >> } > >> >> }); > >> >> > >> >> Sometimes this loop does not terminate when calling > >> >> Future.cancel(true). The only piece of diagnostics I have so far is > >> >> this: > >> >> Exception 'java.lang.InterruptedException' occurred in thread > >> >> 'queue-consumer-reader-thread-1' at > >> >> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2017) > >> >> Exception 'java.lang.InterruptedException' occurred in thread > >> >> 'queue-consumer-reader-thread-1' at > >> >> org.apache.http.impl.conn.tsccm.WaitingThread.await(WaitingThread.java:164) > >> >> Exception 'java.lang.InterruptedException' occurred in thread > >> >> 'queue-consumer-reader-thread-1' at > >> >> org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:410) > >> >> Exception 'java.lang.InterruptedException' occurred in thread > >> >> 'queue-consumer-reader-thread-1' at > >> >> org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:423) > >> >> > >> >> Should I not expect the interrupt flag to be preserved? Do you have > >> >> any suggestions how I could isolate this bug (I'm not 100% sure if > >> >> it's in HttpClient or AWS client right now)? > >> >> > >> >> Thanks > >> >> > >> > > >> > I am not aware of any place in HttpClient where it might meddle with the > >> > interrupt flag. > >> Is there anywhere that InterruptException is caught and either not > >> rethrown, or the flag is not explicitly set again? That would be > >> sufficient. > >> > > > > There are two places where InterruptedException is re-thrown as > > InterruptedIOException. I am not aware of any place where > > InterruptedException can be caught and not re-thrown. > > > But by rethrowing a different exception, the interrupt flag will be cleared, > no? >
I believe so. Honestly, I just do not know what the correct behavior should be. It does appear, though, it is usually expected that a well behaved application would re-interrupt the thread if it does not propagate the InterruptedException [1] Please raise a JIRA for this defect. Oleg [1] http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
