On 30 January 2013 13:00, Oleg Kalnichevski <[email protected]> wrote:
> 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]
Yes, that's the behaviour my code is relying on.

>
> Please raise a JIRA for this defect.
Raised https://issues.apache.org/jira/browse/HTTPCLIENT-1311.  Thanks
for your help, Oleg!

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to