This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 7d8893e296d5 CAMEL-24104: camel-bean - Fix racy Processor-adapter
lookup in AbstractBeanProcessor
7d8893e296d5 is described below
commit 7d8893e296d5f257b5bd35db558277bcb2361c95
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Jul 16 12:37:21 2026 +0200
CAMEL-24104: camel-bean - Fix racy Processor-adapter lookup in
AbstractBeanProcessor
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
.../camel/component/bean/AbstractBeanProcessor.java | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git
a/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java
b/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java
index 429276340ca5..92412328f379 100644
---
a/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java
+++
b/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java
@@ -37,9 +37,9 @@ public abstract class AbstractBeanProcessor extends
AsyncProcessorSupport {
private static final Logger LOG =
LoggerFactory.getLogger(AbstractBeanProcessor.class);
private final BeanHolder beanHolder;
- private transient Processor processor;
+ private transient volatile Processor processor;
private transient Object bean;
- private transient boolean lookupProcessorDone;
+ private transient volatile boolean lookupProcessorDone;
private final Lock lock = new ReentrantLock();
private BeanScope scope;
private String method;
@@ -130,10 +130,15 @@ public abstract class AbstractBeanProcessor extends
AsyncProcessorSupport {
if (!lookupProcessorDone) {
lock.lock();
try {
- lookupProcessorDone = true;
- // so if there is a custom type converter for the bean
to processor
- target =
exchange.getContext().getTypeConverter().tryConvertTo(Processor.class,
exchange, beanTmp);
- processor = target;
+ if (!lookupProcessorDone) {
+ // so if there is a custom type converter for the
bean to processor
+ target =
exchange.getContext().getTypeConverter().tryConvertTo(Processor.class, exchange,
+ beanTmp);
+ processor = target;
+ lookupProcessorDone = true;
+ } else {
+ target = processor;
+ }
} finally {
lock.unlock();
}