You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jv...@apache.org on 2011/09/16 09:58:49 UTC

svn commit: r1171432 - /mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java

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