Applied patch from DIRMINA-995

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

Branch: refs/heads/2.0
Commit: 0b623816fcd8129099dc8d44cfc8c06b9c626b29
Parents: 64726a8
Author: Emmanuel Lécharny <[email protected]>
Authored: Mon Dec 22 09:38:09 2014 +0100
Committer: Emmanuel Lécharny <[email protected]>
Committed: Mon Dec 22 09:38:09 2014 +0100

----------------------------------------------------------------------
 .../org/apache/mina/filter/ssl/SslHandler.java  | 35 +++++++++-----------
 1 file changed, 16 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina/blob/0b623816/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 eb6e2a3..9135717 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
@@ -301,29 +301,26 @@ class SslHandler {
     }
 
     /* no qualifier */void flushScheduledEvents() {
-        // Fire events only when no lock is hold for this handler.
-        if (Thread.holdsLock(this)) {
-            return;
-        }
+        // Fire events only when the lock is available for this handler.
+        if (sslLock.tryLock()) {
 
-        IoFilterEvent event;
+            IoFilterEvent event;
 
-        // We need synchronization here inevitably because filterWrite can be
-        // called simultaneously and cause 'bad record MAC' integrity error.
-        sslLock.lock();
-
-        try {
-            while ((event = filterWriteEventQueue.poll()) != null) {
-                NextFilter nextFilter = event.getNextFilter();
-                nextFilter.filterWrite(session, (WriteRequest) 
event.getParameter());
-            }
+            // We need synchronization here inevitably because filterWrite can 
be
+            // called simultaneously and cause 'bad record MAC' integrity 
error.
+            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();
             }
-        } finally {
-            sslLock.unlock();
         }
     }
 

Reply via email to