This is an automated email from the ASF dual-hosted git repository. elecharny pushed a commit to branch 2.0.X in repository https://gitbox.apache.org/repos/asf/mina.git
The following commit(s) were added to refs/heads/2.0.X by this push: new 6a6e626 Applied a patch pushed in 2.1 6a6e626 is described below commit 6a6e626eae4d6af2c54cd92168c5346671b45957 Author: emmanuel lecharny <elecha...@apache.org> AuthorDate: Tue Feb 8 15:51:06 2022 +0100 Applied a patch pushed in 2.1 --- .../java/org/apache/mina/filter/ssl/SslFilter.java | 23 ++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java index b3b88c6..dde0e64 100644 --- a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java +++ b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java @@ -22,6 +22,7 @@ package org.apache.mina.filter.ssl; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; @@ -513,14 +514,20 @@ public class SslFilter extends IoFilterAdapter { } SslHandler sslHandler = getSslSessionHandler(session); + AtomicBoolean canPushMessage = new AtomicBoolean( false ); + + // The SslHandler instance is *guaranteed* to not be null here synchronized (sslHandler) { - if (!isSslStarted(session) && sslHandler.isInboundDone()) { - // The SSL session must be established first before we - // can push data to the application. Store the incoming - // data into a queue for a later processing - sslHandler.scheduleMessageReceived(nextFilter, message); + if (sslHandler.isOutboundDone() && sslHandler.isInboundDone()) { + // We aren't handshaking here. Let's push the message to the next filter + + // Note: we can push the message to the queue immediately, + // but don't do so in the synchronized block. We use a protected + // flag to do so. + canPushMessage.set( true ); } else { + canPushMessage.set( false ); IoBuffer buf = (IoBuffer) message; try { @@ -565,7 +572,11 @@ public class SslFilter extends IoFilterAdapter { } } - sslHandler.flushMessageReceived(); + if (canPushMessage.get()) { + nextFilter.messageReceived(session, message); + } else { + sslHandler.flushMessageReceived(); + } } @Override