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(); } }
