Fixed issue: NETTY-64 (Dead lock during SSL handshake)
* Acquired handshakeLock explicitly when sending handshake messages and executing delegated tasks
This commit is contained in:
parent
7123581038
commit
3b5c36782d
@ -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();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user