From a9d2b5cef00914c80c158759a5892e1d71423bce Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Fri, 3 Jul 2015 20:43:13 +0200 Subject: [PATCH] Skip empty buffers and not pass these to BIO_write Motivation: When BIO_write is called with an empty buffer it will return 0 for which we call ERR_clear_error(). This is not neccessary as we should just skip these buffers. This eliminates a lot of overhead. Modifications: Skip empty src buffers when call unwrap(...). Result: Less overhead for unwrap(...) when called with empty buffers. --- .../src/main/java/io/netty/handler/ssl/OpenSslEngine.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java b/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java index 2f86b7ecc7..9355c14775 100644 --- a/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java +++ b/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java @@ -652,6 +652,12 @@ public final class OpenSslEngine extends SSLEngine { do { ByteBuffer src = srcs[srcsOffset]; int remaining = src.remaining(); + if (remaining == 0) { + // We must skip empty buffers as BIO_write will return 0 if asked to write something + // with length 0. + srcsOffset ++; + continue; + } int written = writeEncryptedData(src); if (written > 0) { bytesConsumed += written;