Author: davsclaus
Date: Sat Mar 26 10:18:17 2011
New Revision: 1085677

URL: http://svn.apache.org/viewvc?rev=1085677&view=rev
Log:
Fixed very rare concurrent issue causing a NPE in AsyncProcessorHelper

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/util/AsyncProcessorHelper.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/AsyncProcessorHelper.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/AsyncProcessorHelper.java?rev=1085677&r1=1085676&r2=1085677&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/AsyncProcessorHelper.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/AsyncProcessorHelper.java
 Sat Mar 26 10:18:17 2011
@@ -25,6 +25,7 @@ import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.spi.UnitOfWork;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,19 +65,21 @@ public final class AsyncProcessorHelper 
             callback.done(true);
             sync = true;
         } else {
+            final UnitOfWork uow = exchange.getUnitOfWork();
+
             // allow unit of work to wrap callback in case it need to do some 
special work
             // for example the MDCUnitOfWork
             AsyncCallback async = callback;
-            if (exchange.getUnitOfWork() != null) {
-                async = exchange.getUnitOfWork().beforeProcess(processor, 
exchange, callback);
+            if (uow != null) {
+                async = uow.beforeProcess(processor, exchange, callback);
             }
 
             // we support asynchronous routing so invoke it
             sync = processor.process(exchange, async);
 
-            // execute any after processor work
-            if (exchange.getUnitOfWork() != null) {
-                exchange.getUnitOfWork().afterProcess(processor, exchange, 
callback, sync);
+            // execute any after processor work (in current thread, not in the 
callback)
+            if (uow != null) {
+                uow.afterProcess(processor, exchange, callback, sync);
             }
         }
 


Reply via email to