Skip to content

Commit 88cb553

Browse files
committed
Applied patch provided by David Robison already 4 years ago :/ (#28)
1 parent 570f41b commit 88cb553

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

mina-core/src/main/java/org/apache/mina/core/filterchain/IoFilterEvent.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*/
2020
package org.apache.mina.core.filterchain;
2121

22+
import org.apache.mina.core.buffer.IoBuffer;
2223
import org.apache.mina.core.filterchain.IoFilter.NextFilter;
2324
import org.apache.mina.core.session.IdleStatus;
2425
import org.apache.mina.core.session.IoEvent;
@@ -104,6 +105,11 @@ public void fire() {
104105
case MESSAGE_RECEIVED:
105106
Object parameter = getParameter();
106107
nextFilter.messageReceived(session, parameter);
108+
109+
if (parameter instanceof IoBuffer) {
110+
((IoBuffer)parameter).free();
111+
}
112+
107113
break;
108114

109115
case MESSAGE_SENT:

mina-core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) th
165165
newBuf.put(buf);
166166
newBuf.put(in);
167167
newBuf.flip();
168+
buf.free();
168169
buf = newBuf;
169170

170171
// Update the session attribute.
@@ -230,11 +231,19 @@ public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) th
230231
*/
231232
@Override
232233
public void dispose(IoSession session) throws Exception {
233-
removeSessionBuffer(session);
234+
IoBuffer oldBuf = (IoBuffer) session.removeAttribute(BUFFER);
235+
236+
if (oldBuf != null) {
237+
oldBuf.free();
238+
}
234239
}
235240

236241
private void removeSessionBuffer(IoSession session) {
237-
session.removeAttribute(BUFFER);
242+
IoBuffer oldBuf = (IoBuffer) session.getAttribute(BUFFER);
243+
244+
if (oldBuf != null) {
245+
oldBuf.free();
246+
}
238247
}
239248

240249
private void storeRemainingInSession(IoBuffer buf, IoSession session) {
@@ -243,6 +252,12 @@ private void storeRemainingInSession(IoBuffer buf, IoSession session) {
243252
remainingBuf.order(buf.order());
244253
remainingBuf.put(buf);
245254

255+
IoBuffer oldBuf = (IoBuffer) session.removeAttribute(BUFFER);
256+
257+
if (oldBuf != null) {
258+
oldBuf.free();
259+
}
260+
246261
session.setAttribute(BUFFER, remainingBuf);
247262
}
248263

0 commit comments

Comments
 (0)