From f20063d26b640cb4121e092b5a3a0bb4c0a10eb5 Mon Sep 17 00:00:00 2001 From: Scott Mitchell Date: Tue, 16 May 2017 19:12:58 -0700 Subject: [PATCH] SslHandler#wrapNonAppData return early Motivation: SslHandler#wrapNonAppData may be able to return early if it is called from a unwrap method and the status is NEED_UNWRAP. This has been observed to occur while using the OpenSslEngine and can avoid allocation of an extra ByteBuf of size 2048. Modifications: - Return early from SslHandler#wrapNonAppData if NEED_UNWRAP and we are called from an unwrap method Result: Less buffer allocations and early return from SslHandler#wrapNonAppData. --- .../src/main/java/io/netty/handler/ssl/SslHandler.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/handler/src/main/java/io/netty/handler/ssl/SslHandler.java b/handler/src/main/java/io/netty/handler/ssl/SslHandler.java index 34720bf0cd..bd9abdde4b 100644 --- a/handler/src/main/java/io/netty/handler/ssl/SslHandler.java +++ b/handler/src/main/java/io/netty/handler/ssl/SslHandler.java @@ -796,9 +796,14 @@ public class SslHandler extends ByteToMessageDecoder implements ChannelOutboundH runDelegatedTasks(); break; case NEED_UNWRAP: - if (!inUnwrap) { - unwrapNonAppData(ctx); + if (inUnwrap) { + // If we asked for a wrap, the engine requested an unwrap, and we are in unwrap there is + // no use in trying to call wrap again because we have already attempted (or will after we + // return) to feed more data to the engine. + return; } + + unwrapNonAppData(ctx); break; case NEED_WRAP: break;