Repository: mina Updated Branches: refs/heads/2.0 79c4f4173 -> 9b5c07f92
Fix for DIRMINA-1019 Project: http://git-wip-us.apache.org/repos/asf/mina/repo Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/9b5c07f9 Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/9b5c07f9 Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/9b5c07f9 Branch: refs/heads/2.0 Commit: 9b5c07f92d3de0d587cbfdc007756313fb39de12 Parents: 79c4f41 Author: Emmanuel Lécharny <[email protected]> Authored: Wed Oct 7 18:33:42 2015 +0200 Committer: Emmanuel Lécharny <[email protected]> Committed: Wed Oct 7 18:33:42 2015 +0200 ---------------------------------------------------------------------- .../org/apache/mina/filter/ssl/SslHandler.java | 30 +++++++++----------- 1 file changed, 14 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina/blob/9b5c07f9/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 356933d..c905d04 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 @@ -116,7 +116,7 @@ class SslHandler { * for data being produced during the handshake). */ private boolean writingEncryptedData; - private Lock sslLock = new ReentrantLock(); + private ReentrantLock sslLock = new ReentrantLock(); /** * Create a new SSL Handler, and initialize it. @@ -302,25 +302,23 @@ class SslHandler { /* no qualifier */void flushScheduledEvents() { // Fire events only when the lock is available for this handler. - if (sslLock.tryLock()) { - - IoFilterEvent event; + IoFilterEvent event; + try { + sslLock.lock(); // 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()); - } - } finally { - sslLock.unlock(); + while ((event = filterWriteEventQueue.poll()) != null) { + NextFilter nextFilter = event.getNextFilter(); + nextFilter.filterWrite(session, (WriteRequest) event.getParameter()); } + } finally { + sslLock.unlock(); + } + + while ((event = messageReceivedEventQueue.poll()) != null) { + NextFilter nextFilter = event.getNextFilter(); + nextFilter.messageReceived(session, event.getParameter()); } }
