This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch fix/CAMEL-24078-m2 in repository https://gitbox.apache.org/repos/asf/camel.git
commit b6c0c7589fdb00bac95e3c9c59450257e306a2d2 Author: Claus Ibsen <[email protected]> AuthorDate: Wed Jul 15 17:03:41 2026 +0200 CAMEL-24078: camel-jms - Make JmsPollingConsumer.receive(timeout) thread-safe Synchronize on the JmsTemplate to make set-timeout + receive atomic. The polling consumer is cached and shared across concurrent pollEnrich and ConsumerTemplate callers, so unsynchronized access could cause one thread's timeout to be silently overwritten by another. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../apache/camel/component/jms/JmsPollingConsumer.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsPollingConsumer.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsPollingConsumer.java index a2755c5b981e..2e6eac1ee0ae 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsPollingConsumer.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsPollingConsumer.java @@ -55,13 +55,16 @@ public class JmsPollingConsumer extends PollingConsumerSupport { @Override public Exchange receive(long timeout) { - setReceiveTimeout(timeout); Message message; - // using the selector - if (ObjectHelper.isNotEmpty(jmsEndpoint.getSelector())) { - message = template.receiveSelected(jmsEndpoint.getSelector()); - } else { - message = template.receive(); + // synchronize to make set-timeout + receive atomic, as the polling consumer + // may be shared across concurrent pollEnrich / ConsumerTemplate callers + synchronized (template) { + setReceiveTimeout(timeout); + if (ObjectHelper.isNotEmpty(jmsEndpoint.getSelector())) { + message = template.receiveSelected(jmsEndpoint.getSelector()); + } else { + message = template.receive(); + } } if (message != null) { return getEndpoint().createExchange(message, null);
