summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2011-02-17 16:16:31 +0000
committerRobert Gemmell <robbie@apache.org>2011-02-17 16:16:31 +0000
commita3b787e95bd72e1d85ffec209b76280d0a88c54c (patch)
treec1f37b65ba827a032fa0dda37cdca43033bf1471
parent6d30196fb80357e4db8487db7bf6971cce73966d (diff)
downloadqpid-python-a3b787e95bd72e1d85ffec209b76280d0a88c54c.tar.gz
QPID-3028: make assembler and disassembler use a static ThreadLocal for its BBEncoder and BBDecoder, release buffer from BBDecoder when complete
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1071674 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java5
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java10
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java4
3 files changed, 12 insertions, 7 deletions
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java
index 6f7a2fa3b2..10f67e1cd6 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java
@@ -41,6 +41,11 @@ public final class BBDecoder extends AbstractDecoder
this.in.order(ByteOrder.BIG_ENDIAN);
}
+ public void releaseBuffer()
+ {
+ in = null;
+ }
+
protected byte doGet()
{
return in.get();
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java
index 357caa26e1..b3c419959c 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java
@@ -28,7 +28,6 @@ import java.util.Map;
import java.nio.ByteBuffer;
import org.apache.qpid.transport.codec.BBDecoder;
-import org.apache.qpid.transport.codec.Decoder;
import org.apache.qpid.transport.Header;
import org.apache.qpid.transport.Method;
@@ -36,7 +35,6 @@ import org.apache.qpid.transport.ProtocolError;
import org.apache.qpid.transport.ProtocolEvent;
import org.apache.qpid.transport.ProtocolHeader;
import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.SegmentType;
import org.apache.qpid.transport.Struct;
@@ -51,7 +49,7 @@ public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate
private final Receiver<ProtocolEvent> receiver;
private final Map<Integer,List<Frame>> segments;
private final Method[] incomplete;
- private final ThreadLocal<BBDecoder> decoder = new ThreadLocal<BBDecoder>()
+ private static final ThreadLocal<BBDecoder> _decoder = new ThreadLocal<BBDecoder>()
{
public BBDecoder initialValue()
{
@@ -169,7 +167,7 @@ public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate
private void assemble(Frame frame, ByteBuffer segment)
{
- BBDecoder dec = decoder.get();
+ BBDecoder dec = _decoder.get();
dec.init(segment);
int channel = frame.getChannel();
@@ -201,7 +199,7 @@ public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate
break;
case HEADER:
command = incomplete[channel];
- List<Struct> structs = new ArrayList(2);
+ List<Struct> structs = new ArrayList<Struct>(2);
while (dec.hasRemaining())
{
structs.add(dec.readStruct32());
@@ -222,6 +220,8 @@ public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate
default:
throw new IllegalStateException("unknown frame type: " + frame.getType());
}
+
+ dec.releaseBuffer();
}
}
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java
index bf439299b9..341264c347 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java
@@ -54,7 +54,7 @@ public final class Disassembler implements Sender<ProtocolEvent>,
private final int maxPayload;
private final ByteBuffer header;
private final Object sendlock = new Object();
- private final ThreadLocal<BBEncoder> encoder = new ThreadLocal<BBEncoder>()
+ private final static ThreadLocal<BBEncoder> _encoder = new ThreadLocal<BBEncoder>()
{
public BBEncoder initialValue()
{
@@ -183,7 +183,7 @@ public final class Disassembler implements Sender<ProtocolEvent>,
private void method(Method method, SegmentType type)
{
- BBEncoder enc = encoder.get();
+ BBEncoder enc = _encoder.get();
enc.init();
enc.writeUint16(method.getEncodedType());
if (type == SegmentType.COMMAND)