Repository: mina
Updated Branches:
  refs/heads/2.0 2030bf02a -> a2b686e11


Applied patch for DIRMINA-934

Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/a2b686e1
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/a2b686e1
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/a2b686e1

Branch: refs/heads/2.0
Commit: a2b686e1134ef8f83f6bf397a2de8c42bba3cbe3
Parents: 2030bf0
Author: Emmanuel Lécharny <[email protected]>
Authored: Tue Sep 2 12:36:16 2014 +0200
Committer: Emmanuel Lécharny <[email protected]>
Committed: Tue Sep 2 12:36:16 2014 +0200

----------------------------------------------------------------------
 .../codec/AbstractProtocolDecoderOutput.java    |  4 ++--
 .../mina/filter/codec/ProtocolCodecFilter.java  | 20 +++++++++-----------
 2 files changed, 11 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina/blob/a2b686e1/mina-core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java
----------------------------------------------------------------------
diff --git 
a/mina-core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java
 
b/mina-core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java
index 64ac583..b98d0ab 100644
--- 
a/mina-core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java
+++ 
b/mina-core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java
@@ -19,8 +19,8 @@
  */
 package org.apache.mina.filter.codec;
 
+import java.util.LinkedList;
 import java.util.Queue;
-import java.util.concurrent.ConcurrentLinkedQueue;
 
 /**
  * A {@link ProtocolDecoderOutput} based on queue.
@@ -28,7 +28,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
  * @author <a href="http://mina.apache.org";>Apache MINA Project</a>
  */
 public abstract class AbstractProtocolDecoderOutput implements 
ProtocolDecoderOutput {
-    private final Queue<Object> messageQueue = new 
ConcurrentLinkedQueue<Object>();
+    private final Queue<Object> messageQueue = new LinkedList<Object>();
 
     public AbstractProtocolDecoderOutput() {
         // Do nothing

http://git-wip-us.apache.org/repos/asf/mina/blob/a2b686e1/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
----------------------------------------------------------------------
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 99270e5..faa5d90 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
@@ -21,6 +21,7 @@ package org.apache.mina.filter.codec;
 
 import java.net.SocketAddress;
 import java.util.Queue;
+import java.util.concurrent.Semaphore;
 
 import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.file.FileRegion;
@@ -65,8 +66,9 @@ public class ProtocolCodecFilter extends IoFilterAdapter {
     /** The factory responsible for creating the encoder and decoder */
     private final ProtocolCodecFactory factory;
 
+    private final Semaphore lock = new Semaphore(1, true);
+
     /**
-     * 
      * Creates a new instance of ProtocolCodecFilter, associating a factory
      * for the creation of the encoder and decoder.
      *
@@ -225,13 +227,10 @@ public class ProtocolCodecFilter extends IoFilterAdapter {
         // data in the buffer
         while (in.hasRemaining()) {
             int oldPos = in.position();
-
             try {
-                synchronized (decoderOut) {
-                    // Call the decoder with the read bytes
-                    decoder.decode(session, in, decoderOut);
-                }
-
+                lock.acquire();
+                // Call the decoder with the read bytes
+                decoder.decode(session, in, decoderOut);
                 // Finish decoding if no exception was thrown.
                 decoderOut.flush(nextFilter, session);
             } catch (Throwable t) {
@@ -241,7 +240,6 @@ public class ProtocolCodecFilter extends IoFilterAdapter {
                 } else {
                     pde = new ProtocolDecoderException(t);
                 }
-
                 if (pde.getHexdump() == null) {
                     // Generate a message hex dump
                     int curPos = in.position();
@@ -249,11 +247,9 @@ public class ProtocolCodecFilter extends IoFilterAdapter {
                     pde.setHexdump(in.getHexDump());
                     in.position(curPos);
                 }
-
                 // Fire the exceptionCaught event.
                 decoderOut.flush(nextFilter, session);
                 nextFilter.exceptionCaught(session, pde);
-
                 // Retry only if the type of the caught exception is
                 // recoverable and the buffer position has changed.
                 // We check buffer position additionally to prevent an
@@ -261,6 +257,8 @@ public class ProtocolCodecFilter extends IoFilterAdapter {
                 if (!(t instanceof RecoverableProtocolDecoderException) || 
(in.position() == oldPos)) {
                     break;
                 }
+            } finally {
+                lock.release();
             }
         }
     }
@@ -446,7 +444,7 @@ public class ProtocolCodecFilter extends IoFilterAdapter {
             if (future == null) {
                 // Creates an empty writeRequest containing the destination
                 WriteRequest writeRequest = new DefaultWriteRequest(
-                    DefaultWriteRequest.EMPTY_MESSAGE, null, destination);
+                        DefaultWriteRequest.EMPTY_MESSAGE, null, destination);
                 future = DefaultWriteFuture.newNotWrittenFuture(session, new 
NothingWrittenException(writeRequest));
             }
 

Reply via email to