diff --git a/distribution/pom.xml b/distribution/pom.xml index c51fdc117..311647897 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -24,7 +24,7 @@ mina-parent org.apache.mina - 2.1.4-SNAPSHOT + 2.1.4-PSG distribution diff --git a/mina-core/pom.xml b/mina-core/pom.xml index 6cf37de85..0c64fcb43 100644 --- a/mina-core/pom.xml +++ b/mina-core/pom.xml @@ -24,7 +24,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-core diff --git a/mina-core/src/main/java/org/apache/mina/core/filterchain/IoFilterEvent.java b/mina-core/src/main/java/org/apache/mina/core/filterchain/IoFilterEvent.java index 99901dc64..102c99ec8 100644 --- a/mina-core/src/main/java/org/apache/mina/core/filterchain/IoFilterEvent.java +++ b/mina-core/src/main/java/org/apache/mina/core/filterchain/IoFilterEvent.java @@ -19,6 +19,7 @@ */ package org.apache.mina.core.filterchain; +import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.filterchain.IoFilter.NextFilter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoEvent; @@ -104,6 +105,7 @@ public void fire() { case MESSAGE_RECEIVED: Object parameter = getParameter(); nextFilter.messageReceived(session, parameter); + if (parameter instanceof IoBuffer) ((IoBuffer)parameter).free(); break; case MESSAGE_SENT: diff --git a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java index 8b13e99ea..1106a3509 100644 --- a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java +++ b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java @@ -537,12 +537,15 @@ private void read(S session) { if (readBytes > 0) { IoFilterChain filterChain = session.getFilterChain(); filterChain.fireMessageReceived(buf); + buf.free(); buf = null; if (hasFragmentation) { if (readBytes << 1 < config.getReadBufferSize()) { + if (LOG.isDebugEnabled()) LOG.debug("Decrease read buffer size: current: " + config.getReadBufferSize()); session.decreaseReadBufferSize(); } else if (readBytes == config.getReadBufferSize()) { + if (LOG.isDebugEnabled()) LOG.debug("Increase read buffer size: current: " + config.getReadBufferSize()); session.increaseReadBufferSize(); } } diff --git a/mina-core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java b/mina-core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java index e369ba916..833090a5b 100644 --- a/mina-core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java +++ b/mina-core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java @@ -57,7 +57,7 @@ public void write(Object encodedMessage) { if (encodedMessage instanceof IoBuffer) { IoBuffer buf = (IoBuffer) encodedMessage; if (buf.hasRemaining()) { - messageQueue.offer(buf); + messageQueue.offer(buf.duplicate()); } else { throw new IllegalArgumentException("buf is empty. Forgot to call flip()?"); } @@ -100,6 +100,7 @@ public void mergeAll() { } newBuf.put(buf); + buf.free(); } // Push the new buffer finally. diff --git a/mina-core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java b/mina-core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java index fc3ace994..a6fa946d9 100644 --- a/mina-core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java +++ b/mina-core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java @@ -165,9 +165,12 @@ public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) th newBuf.put(buf); newBuf.put(in); newBuf.flip(); + buf.free(); buf = newBuf; // Update the session attribute. + //IoBuffer oldBuf = (IoBuffer) session.getAttribute(BUFFER); + //if (oldBuf != null) oldBuf.free(); session.setAttribute(BUFFER, buf); } } else { @@ -234,8 +237,9 @@ public void dispose(IoSession session) throws Exception { } private void removeSessionBuffer(IoSession session) { - session.removeAttribute(BUFFER); - } + IoBuffer oldBuf = (IoBuffer) session.removeAttribute(BUFFER); + if (oldBuf != null) oldBuf.free(); + } private void storeRemainingInSession(IoBuffer buf, IoSession session) { final IoBuffer remainingBuf = IoBuffer.allocate(buf.capacity()).setAutoExpand(true); @@ -243,6 +247,8 @@ private void storeRemainingInSession(IoBuffer buf, IoSession session) { remainingBuf.order(buf.order()); remainingBuf.put(buf); + IoBuffer oldBuf = (IoBuffer) session.removeAttribute(BUFFER); + if (oldBuf != null) oldBuf.free(); session.setAttribute(BUFFER, remainingBuf); } diff --git a/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java b/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java index 628e4f244..5e1b37f64 100644 --- a/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java +++ b/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java @@ -281,6 +281,7 @@ public void messageReceived(NextFilter nextFilter, IoSession session, Object mes } } } + //in.free(); } /** diff --git a/mina-core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java b/mina-core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java index 273d805ac..14e068681 100644 --- a/mina-core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java +++ b/mina-core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java @@ -26,6 +26,7 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; +import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.filterchain.IoFilterAdapter; import org.apache.mina.core.filterchain.IoFilterChain; import org.apache.mina.core.filterchain.IoFilterEvent; @@ -563,8 +564,13 @@ public final void exceptionCaught(NextFilter nextFilter, IoSession session, Thro @Override public final void messageReceived(NextFilter nextFilter, IoSession session, Object message) { if (eventTypes.contains(IoEventType.MESSAGE_RECEIVED)) { - IoFilterEvent event = new IoFilterEvent(nextFilter, IoEventType.MESSAGE_RECEIVED, session, message); - fireEvent(event); + if (message instanceof IoBuffer) { + IoFilterEvent event = new IoFilterEvent(nextFilter, IoEventType.MESSAGE_RECEIVED, session, ((IoBuffer)message).duplicate()); + fireEvent(event); + } else { + IoFilterEvent event = new IoFilterEvent(nextFilter, IoEventType.MESSAGE_RECEIVED, session, message); + fireEvent(event); + } } else { nextFilter.messageReceived(session, message); } diff --git a/mina-example/pom.xml b/mina-example/pom.xml index 812560b88..1993d3c23 100644 --- a/mina-example/pom.xml +++ b/mina-example/pom.xml @@ -21,7 +21,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-example diff --git a/mina-filter-compression/pom.xml b/mina-filter-compression/pom.xml index 7979560bd..7216f3fd8 100644 --- a/mina-filter-compression/pom.xml +++ b/mina-filter-compression/pom.xml @@ -24,7 +24,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-filter-compression diff --git a/mina-http/pom.xml b/mina-http/pom.xml index 636c35a26..67491a04a 100644 --- a/mina-http/pom.xml +++ b/mina-http/pom.xml @@ -24,7 +24,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-http diff --git a/mina-integration-beans/pom.xml b/mina-integration-beans/pom.xml index cb524232f..4d768a02d 100644 --- a/mina-integration-beans/pom.xml +++ b/mina-integration-beans/pom.xml @@ -24,7 +24,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-integration-beans diff --git a/mina-integration-jmx/pom.xml b/mina-integration-jmx/pom.xml index cd192c155..5646c77f0 100644 --- a/mina-integration-jmx/pom.xml +++ b/mina-integration-jmx/pom.xml @@ -24,7 +24,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-integration-jmx diff --git a/mina-integration-ognl/pom.xml b/mina-integration-ognl/pom.xml index dd2cb960a..3e51d8b11 100644 --- a/mina-integration-ognl/pom.xml +++ b/mina-integration-ognl/pom.xml @@ -24,7 +24,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-integration-ognl diff --git a/mina-integration-xbean/pom.xml b/mina-integration-xbean/pom.xml index d1905b2a5..9eec816d6 100644 --- a/mina-integration-xbean/pom.xml +++ b/mina-integration-xbean/pom.xml @@ -24,7 +24,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-integration-xbean diff --git a/mina-legal/pom.xml b/mina-legal/pom.xml index 1f890eb53..7bc385bd1 100644 --- a/mina-legal/pom.xml +++ b/mina-legal/pom.xml @@ -21,7 +21,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-legal diff --git a/mina-statemachine/pom.xml b/mina-statemachine/pom.xml index eba084c7e..fb498f2f2 100644 --- a/mina-statemachine/pom.xml +++ b/mina-statemachine/pom.xml @@ -24,7 +24,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-statemachine diff --git a/mina-transport-apr/pom.xml b/mina-transport-apr/pom.xml index f4be13a13..d5eb333b2 100644 --- a/mina-transport-apr/pom.xml +++ b/mina-transport-apr/pom.xml @@ -22,7 +22,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-transport-apr diff --git a/mina-transport-serial/pom.xml b/mina-transport-serial/pom.xml index 585eab3ce..45132f9cd 100644 --- a/mina-transport-serial/pom.xml +++ b/mina-transport-serial/pom.xml @@ -24,7 +24,7 @@ org.apache.mina mina-parent - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-transport-serial diff --git a/pom.xml b/pom.xml index ee464a63c..814ecadb6 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ org.apache.mina - 2.1.4-SNAPSHOT + 2.1.4-PSG mina-parent Apache MINA pom