From d0964a4b46ecbd6146ce56c04a0384d8bf0974d0 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Sun, 16 Nov 2008 16:35:09 +0000 Subject: [PATCH] Additional synchronization condition to avoid 'missing algorithm' error --- src/main/java/org/jboss/netty/handler/ssl/SslHandler.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jboss/netty/handler/ssl/SslHandler.java b/src/main/java/org/jboss/netty/handler/ssl/SslHandler.java index 14f58d93e4..ce64d6ddbc 100644 --- a/src/main/java/org/jboss/netty/handler/ssl/SslHandler.java +++ b/src/main/java/org/jboss/netty/handler/ssl/SslHandler.java @@ -124,6 +124,7 @@ public class SslHandler extends FrameDecoder { private final boolean startTls; final Object handshakeLock = new Object(); + private volatile boolean needsFirstHandshake = true; private volatile boolean handshaking; private volatile boolean handshaken; private volatile ChannelFuture handshakeFuture; @@ -567,7 +568,7 @@ public class SslHandler extends FrameDecoder { SSLEngineResult result; try { for (;;) { - if (handshaking) { + if (handshaking || needsFirstHandshake) { synchronized (handshakeLock) { result = engine.wrap(EMPTY_BUFFER, outNetBuf); } @@ -632,7 +633,7 @@ public class SslHandler extends FrameDecoder { loop: for (;;) { SSLEngineResult result; - if (handshaking) { + if (handshaking || needsFirstHandshake) { synchronized (handshakeLock) { result = engine.unwrap(inNetBuf, outAppBuf); } @@ -704,6 +705,7 @@ public class SslHandler extends FrameDecoder { synchronized (handshakeLock) { handshaking = false; handshaken = true; + needsFirstHandshake = false; // Will not set to true again if (handshakeFuture == null) { handshakeFuture = newHandshakeFuture(channel);