From 3b5c36782daf2a49dc21d3aa3d39a6d37f02b319 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Fri, 14 Nov 2008 12:05:49 +0000 Subject: [PATCH] Fixed issue: NETTY-64 (Dead lock during SSL handshake) * Acquired handshakeLock explicitly when sending handshake messages and executing delegated tasks --- .../jboss/netty/handler/ssl/SslHandler.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 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 7cad5c86dd..8d9db87cdc 100644 --- a/src/main/java/org/jboss/netty/handler/ssl/SslHandler.java +++ b/src/main/java/org/jboss/netty/handler/ssl/SslHandler.java @@ -118,7 +118,7 @@ public class SslHandler extends FrameDecoder { private final Executor delegatedTaskExecutor; private final boolean startTls; - private final Object handshakeLock = new Object(); + final Object handshakeLock = new Object(); private volatile boolean handshaking; private volatile boolean handshaken; private volatile ChannelFuture handshakeFuture; @@ -550,7 +550,13 @@ public class SslHandler extends FrameDecoder { SSLEngineResult result; try { for (;;) { - result = engine.wrap(EMPTY_BUFFER, outNetBuf); + if (handshaking) { + synchronized (handshakeLock) { + result = engine.wrap(EMPTY_BUFFER, outNetBuf); + } + } else { + result = engine.wrap(EMPTY_BUFFER, outNetBuf); + } if (result.bytesProduced() > 0) { outNetBuf.flip(); @@ -648,7 +654,14 @@ public class SslHandler extends FrameDecoder { private void runDelegatedTasks() { Runnable task; while ((task = engine.getDelegatedTask()) != null) { - delegatedTaskExecutor.execute(task); + final Runnable t = task; + delegatedTaskExecutor.execute(new Runnable() { + public void run() { + synchronized (handshakeLock) { + t.run(); + } + } + }); } }