Author: ffang
Date: Tue May 12 11:20:27 2009
New Revision: 773861
URL: http://svn.apache.org/viewvc?rev=773861&view=rev
Log:
[SMXCOMP-536]potential memory leak for cxf continuation
Modified:
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
Modified:
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
URL:
http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java?rev=773861&r1=773860&r2=773861&view=diff
==============================================================================
---
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
(original)
+++
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
Tue May 12 11:20:27 2009
@@ -710,16 +710,17 @@
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.isOneway) {
+ CxfBcConsumer.this.messages.put(exchange.getExchangeId(),
message);
context.getDeliveryChannel().sendSync(exchange,
timeout * 1000);
process(exchange);
@@ -730,6 +731,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);
@@ -737,6 +739,7 @@
} else {
//retry or timeout
if (!continuation.isResumed()) {
+ messages.remove(exchange.getExchangeId());
//exchange timeout
throw new Exception("Exchange timed out: " +
exchange.getExchangeId());
}