From a99f2589842ef2c010df2d304a084dd40c9c36d3 Mon Sep 17 00:00:00 2001 From: norman Date: Fri, 18 May 2012 08:10:34 +0200 Subject: [PATCH] Make sure SslHandler also works if SslBufferPool use non heap ByteBuffers. See #329 --- .../java/io/netty/handler/ssl/SslHandler.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 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 557764296d..dede5b48a8 100644 --- a/handler/src/main/java/io/netty/handler/ssl/SslHandler.java +++ b/handler/src/main/java/io/netty/handler/ssl/SslHandler.java @@ -710,8 +710,14 @@ public class SslHandler extends FrameDecoder if (result.bytesProduced() > 0) { outNetBuf.flip(); - msg = ChannelBuffers.buffer(outNetBuf.remaining()); - msg.writeBytes(outNetBuf.array(), 0, msg.capacity()); + int remaining = outNetBuf.remaining(); + msg = ChannelBuffers.buffer(remaining); + + // Transfer the bytes to the new ChannelBuffer using some safe method that will also + // work with "non" heap buffers + // + // See https://github.com/netty/netty/issues/329 + msg.writeBytes(outNetBuf); outNetBuf.clear(); if (pendingWrite.outAppBuf.hasRemaining()) { @@ -850,7 +856,12 @@ public class SslHandler extends FrameDecoder if (result.bytesProduced() > 0) { outNetBuf.flip(); ChannelBuffer msg = ChannelBuffers.buffer(outNetBuf.remaining()); - msg.writeBytes(outNetBuf.array(), 0, msg.capacity()); + + // Transfer the bytes to the new ChannelBuffer using some safe method that will also + // work with "non" heap buffers + // + // See https://github.com/netty/netty/issues/329 + msg.writeBytes(outNetBuf); outNetBuf.clear(); future = future(channel); @@ -993,7 +1004,12 @@ public class SslHandler extends FrameDecoder if (outAppBuf.hasRemaining()) { ChannelBuffer frame = ctx.getChannel().getConfig().getBufferFactory().getBuffer(outAppBuf.remaining()); - frame.writeBytes(outAppBuf.array(), 0, frame.capacity()); + // Transfer the bytes to the new ChannelBuffer using some safe method that will also + // work with "non" heap buffers + // + // See https://github.com/netty/netty/issues/329 + frame.writeBytes(outAppBuf); + return frame; } else { return null;