You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ff...@apache.org on 2009/05/12 12:54:32 UTC

svn commit: r773843 - /servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java

Author: ffang
Date: Tue May 12 10:54:31 2009
New Revision: 773843

URL: http://svn.apache.org/viewvc?rev=773843&view=rev
Log:
[SMXCOMP-536]potential memory leak for cxf continuation

Modified:
    servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java?rev=773843&r1=773842&r2=773843&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java Tue May 12 10:54:31 2009
@@ -291,7 +291,7 @@
         }
         
         Message message = messages.remove(exchange.getExchangeId());
-                       
+                               
         synchronized (message.getInterceptorChain()) {
             boolean oneway = message.getExchange().get(
                     BindingOperationInfo.class).getOperationInfo().isOneWay();
@@ -714,15 +714,16 @@
             ComponentContext context = message.getExchange().get(
                     ComponentContext.class);
             CxfBcConsumer.this.configureExchangeTarget(exchange);
-            CxfBcConsumer.this.messages.put(exchange.getExchangeId(), message);
             CxfBcConsumer.this.isOneway = message.getExchange().get(
                     BindingOperationInfo.class).getOperationInfo().isOneWay();
             message.getExchange().setOneWay(CxfBcConsumer.this.isOneway);
 
             try {
                 if (CxfBcConsumer.this.isOneway) {
+                    CxfBcConsumer.this.messages.put(exchange.getExchangeId(), message);
                     context.getDeliveryChannel().send(exchange);
                 } else if (CxfBcConsumer.this.isSynchronous()) {
+                    CxfBcConsumer.this.messages.put(exchange.getExchangeId(), message);
                     context.getDeliveryChannel().sendSync(exchange,
                         timeout * 1000);
                     process(exchange);
@@ -733,6 +734,7 @@
                             (ContinuationProvider) message.get(ContinuationProvider.class.getName());
                         Continuation continuation = continuationProvider.getContinuation();
                         if (!continuation.isPending()) {
+                            CxfBcConsumer.this.messages.put(exchange.getExchangeId(), message);
                             context.getDeliveryChannel().send(exchange);
                             if (!isSTFlow) {
                                 continuation.suspend(timeout * 1000);
@@ -741,6 +743,7 @@
                             //retry or timeout
                             if (!continuation.isResumed()) {
                                 //exchange timeout
+                                messages.remove(exchange.getExchangeId());
                                 throw new Exception("Exchange timed out: " + exchange.getExchangeId());
                             }