From 7bc07350f1573926cbbc70e15bbc1b29aa66e951 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Fri, 3 Jul 2015 23:07:41 +0200 Subject: [PATCH] Stop calling BIO_write once internal buffer is full. Motivation: Previous we called BIO_write until either everything was written into it or it returned an error, which meant that the buffer is full. This then needed a ERR_clear_error() call which is expensive. Modifications: Break out of writing loop once we detect that not everything was written and so the buffer is full. Result: Less overhead when writing more data then the internal buffer can take. --- .../src/main/java/io/netty/handler/ssl/OpenSslEngine.java | 5 +++++ 1 file changed, 5 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 9355c14775..853905c610 100644 --- a/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java +++ b/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java @@ -664,6 +664,11 @@ public final class OpenSslEngine extends SSLEngine { if (written == remaining) { srcsOffset ++; + } else { + // We were not able to write everything into the BIO so break the write loop as otherwise + // we will produce an error on the next write attempt, which will trigger a SSL.clearError() + // later. + break; } } else { // BIO_write returned a negative or zero number, this means we could not complete the write