Guard against race when calling SslHandler.handshakeFuture().sync()
Motivation: If the handlerAdded(...) callback was not called, the checkDeadLock() of the handshakeFuture will produce an IllegalStateException. This was first reported at https://github.com/impossibl/pgjdbc-ng/issues/168 . Modifications: Pass deadlock check if ctx is null Result: No more race and so IllegalStateException.
This commit is contained in:
parent
6f9eb2cd34
commit
a485ae68dc
@ -1543,5 +1543,19 @@ public class SslHandler extends ByteToMessageDecoder implements ChannelOutboundH
|
||||
}
|
||||
return ctx.executor();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void checkDeadLock() {
|
||||
if (ctx == null) {
|
||||
// If ctx is null the handlerAdded(...) callback was not called, in this case the checkDeadLock()
|
||||
// method was called from another Thread then the one that is used by ctx.executor(). We need to
|
||||
// guard against this as a user can see a race if handshakeFuture().sync() is called but the
|
||||
// handlerAdded(..) method was not yet as it is called from the EventExecutor of the
|
||||
// ChannelHandlerContext. If we not guard against this super.checkDeadLock() would cause an
|
||||
// IllegalStateException when trying to call executor().
|
||||
return;
|
||||
}
|
||||
super.checkDeadLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user