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();
}
}