Author: gnodet
Date: Mon Sep 11 05:54:49 2006
New Revision: 442201

URL: http://svn.apache.org/viewvc?view=rev&rev=442201
Log:
SM-571: Memory leak in DeliveryChannelImpl

Modified:
    
incubator/servicemix/branches/servicemix-3.0/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java

Modified: 
incubator/servicemix/branches/servicemix-3.0/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/branches/servicemix-3.0/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java?view=diff&rev=442201&r1=442200&r2=442201
==============================================================================
--- 
incubator/servicemix/branches/servicemix-3.0/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java
 (original)
+++ 
incubator/servicemix/branches/servicemix-3.0/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java
 Mon Sep 11 05:54:49 2006
@@ -442,8 +442,9 @@
         messageExchange.setProperty(JbiConstants.SEND_SYNC, Boolean.TRUE);
         // Call doSend
         MessageExchangeImpl me = (MessageExchangeImpl) messageExchange;
+        String exchangeKey = getKeyForExchange(me);
         try {
-            exchangesById.put((me.getRole() == Role.CONSUMER ? "consumer:" : 
"provider:") + me.getExchangeId(), me);
+            exchangesById.put(exchangeKey, me);
             // Synchronously send a message and wait for the response
             synchronized (me) {
                 doSend(me, true);
@@ -479,7 +480,7 @@
             e.printStackTrace();
             throw e;
         } finally {
-            exchangesById.remove(messageExchange.getExchangeId());
+            exchangesById.remove(exchangeKey);
         }
         return result;
     }
@@ -583,7 +584,7 @@
         incrementInboundStats();
 
         // Retrieve the original exchange sent
-        MessageExchangeImpl original = (MessageExchangeImpl) 
exchangesById.get((me.getRole() == Role.CONSUMER ? "consumer:" : "provider:") + 
me.getExchangeId());
+        MessageExchangeImpl original = (MessageExchangeImpl) 
exchangesById.get(getKeyForExchange(me));
         if (original != null && me != original) {
             original.copyFrom(me);
             me = original;
@@ -808,5 +809,9 @@
      */
     public String toString() {
         return "DeliveryChannel{" + component.getName() + "}";
+    }
+    
+    private String getKeyForExchange(MessageExchangeImpl me) {
+        return (me.getRole() == Role.CONSUMER ? "consumer:" : "provider:") + 
me.getExchangeId();
     }
 }


Reply via email to