Author: jvermillard
Date: Fri Sep 16 07:58:49 2011
New Revision: 1171432
URL: http://svn.apache.org/viewvc?rev=1171432&view=rev
Log:
Use ThreadLocal for walking chain of filter
Modified:
mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java
Modified:
mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java?rev=1171432&r1=1171431&r2=1171432&view=diff
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java
Fri Sep 16 07:58:49 2011
@@ -66,7 +66,7 @@ public class DefaultIoFilterController i
}
}
- private int readChainPosition;
+ private static final ThreadLocal<Integer> readChainPosition = new
ThreadLocal<Integer>();
@Override
public void processMessageReceived(IoSession session, Object message) {
@@ -74,13 +74,13 @@ public class DefaultIoFilterController i
if (chain.length < 1) {
LOG.debug("Nothing to do, the chain is empty");
} else {
- readChainPosition = 0;
+ readChainPosition.set(0);
// we call the first filter, it's supposed to call the next ones
using the filter chain controller
- chain[readChainPosition].messageReceived(session, message, this);
+ chain[readChainPosition.get()].messageReceived(session, message,
this);
}
}
- private int writeChainPosition;
+ private static final ThreadLocal<Integer> writeChainPosition = new
ThreadLocal<Integer>();
@Override
public void processMessageWriting(IoSession session, Object message) {
@@ -89,35 +89,39 @@ public class DefaultIoFilterController i
LOG.debug("Nothing to do, the chain is empty, we just enqueue the
message");
session.enqueueWriteRequest(message);
} else {
- writeChainPosition = chain.length - 1;
+
+ writeChainPosition.set(chain.length - 1);
// we call the first filter, it's supposed to call the next ones
using the filter chain controller
- chain[writeChainPosition].messageWriting(session, message, this);
+ chain[writeChainPosition.get()].messageWriting(session, message,
this);
}
}
@Override
public void callWriteNextFilter(IoSession session, Object message) {
- LOG.debug("calling next filter for writing for message '{}' position :
{}", message, writeChainPosition);
- writeChainPosition--;
- if (writeChainPosition < 0 || chain.length == 0) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("calling next filter for writing for message '{}'
position : {}", message,
+ writeChainPosition.get());
+ }
+ writeChainPosition.set(writeChainPosition.get() - 1);
+ if (writeChainPosition.get() < 0 || chain.length == 0) {
// end of chain processing
LOG.debug("end of write chan we enque the message in the session :
{}", message);
session.enqueueWriteRequest(message);
} else {
- chain[writeChainPosition].messageWriting(session, message, this);
+ chain[writeChainPosition.get()].messageWriting(session, message,
this);
}
- writeChainPosition++;
+ writeChainPosition.set(writeChainPosition.get() + 1);
}
@Override
public void callReadNextFilter(IoSession session, Object message) {
- readChainPosition++;
- if (readChainPosition >= chain.length) {
+ readChainPosition.set(readChainPosition.get() + 1);
+ if (readChainPosition.get() >= chain.length) {
// end of chain processing
} else {
- chain[readChainPosition].messageReceived(session, message, this);
+ chain[readChainPosition.get()].messageReceived(session, message,
this);
}
- readChainPosition--;
+ readChainPosition.set(readChainPosition.get() - 1);
}
@Override