You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2014/09/11 08:17:18 UTC

git commit: Added a lock, instead of synchrnizing teh whole section. We now prtect the write and read as a whole (that should be a fix for DIRMINA-779)

Repository: mina
Updated Branches:
  refs/heads/2.0 691c41831 -> 56a6e5800


Added a lock, instead of synchrnizing teh whole section. We now prtect
the write and read as a whole (that should be a fix for DIRMINA-779)

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

Branch: refs/heads/2.0
Commit: 56a6e58004ea4a6af5640f03d1f6796a073c5d62
Parents: 691c418
Author: Emmanuel Lécharny <el...@symas.com>
Authored: Thu Sep 11 08:17:04 2014 +0200
Committer: Emmanuel Lécharny <el...@symas.com>
Committed: Thu Sep 11 08:17:04 2014 +0200

----------------------------------------------------------------------
 .../org/apache/mina/filter/ssl/SslHandler.java    | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina/blob/56a6e580/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
index abb8606..f801d7b 100644
--- a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
+++ b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
@@ -23,6 +23,8 @@ import java.net.InetSocketAddress;
 import java.nio.ByteBuffer;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.SSLEngineResult;
@@ -114,6 +116,8 @@ class SslHandler {
      * for data being produced during the handshake). */
     private boolean writingEncryptedData;
 
+    private Lock sslLock = new ReentrantLock();
+
     /**
      * Create a new SSL Handler, and initialize it.
      *
@@ -306,16 +310,20 @@ class SslHandler {
 
         // We need synchronization here inevitably because filterWrite can be
         // called simultaneously and cause 'bad record MAC' integrity error.
-        synchronized (this) {
+        sslLock.lock();
+
+        try {
             while ((event = filterWriteEventQueue.poll()) != null) {
                 NextFilter nextFilter = event.getNextFilter();
                 nextFilter.filterWrite(session, (WriteRequest) event.getParameter());
             }
-        }
 
-        while ((event = messageReceivedEventQueue.poll()) != null) {
-            NextFilter nextFilter = event.getNextFilter();
-            nextFilter.messageReceived(session, event.getParameter());
+            while ((event = messageReceivedEventQueue.poll()) != null) {
+                NextFilter nextFilter = event.getNextFilter();
+                nextFilter.messageReceived(session, event.getParameter());
+            }
+        } finally {
+            sslLock.unlock();
         }
     }