Jérôme FOUILLOY created CAMEL-22390: ---------------------------------------
Summary: Infinite loop on interrupt SedaConsumer Key: CAMEL-22390 URL: https://issues.apache.org/jira/browse/CAMEL-22390 Project: Camel Issue Type: Bug Components: camel-seda Affects Versions: 4.4.0, 4.x Environment: Problem detected on Linux, reproduced on Windows 11 OpenJDK 17. Bug applicable to all environment. Reporter: Jérôme FOUILLOY Attachments: Infinite loop interrupt SedaConsumer.zip We use camel 4.9.0 with Karaf, since update version from version greater than 4.3 we have infinite loop when my code interrupts an SedaConsumer thread to ask the end of processor. The commit https://github.com/apache/camel/commit/1c73ce90679ab0cc5e5bdb36b4e221462af7ef56 has added interrupt on catch(InterruptedException) in SedaConsumer. The infinite loop comes from following code : Exchange exchange = null; try { // use the end user configured poll timeout exchange = queue.poll(pollTimeout, TimeUnit.MILLISECONDS); if (LOG.isTraceEnabled()) { LOG.trace("Polled queue {} with timeout {} ms. -> {}", ObjectHelper.getIdentityHashCode(queue), pollTimeout, exchange); } ... } catch (InterruptedException e) { LOG.debug("Sleep interrupted, are we stopping? {}", isStopping() || isStopped()); Thread.currentThread().interrupt(); } catch (Exception e) { if (exchange != null) { getExceptionHandler().handleException("Error processing exchange", exchange, e); } else { getExceptionHandler().handleException(e); } } My code requests to interrupt the thread SedaConsumer , the queue.poll detects interrupted status then it throws an exception, the SedaConsumer catches the exception, it marks the camel thread as interrupted, on next loop the camel thread calls queue.poll(…) who throws InterruptedException. => Infinite loop, the thread consumes about 10% CPU and never terminate, it creates memory leak with 100Mo in several seconds on my local computer. The DEBUG log spams with message "DEBUG Sleep interrupted, are we stopping? false" May be my code shouldn't interrupt seda thread, but SedaThread should be never create infinite loop on interrupt. I think that main while of SedaConsumer should check an boolean with interrupted status set in catch(InterruptedException) instead to call interrupt() again. I have written code to reproduce the problem, see attached zip file with unit test. I have written a patch fix that works fine in my stack, it based on stop the while when interrupt is received. -- This message was sent by Atlassian Jira (v8.20.10#820010)