Fix buffer leaks
This commit is contained in:
parent
9dfad35423
commit
ecb215c12f
@ -211,7 +211,9 @@ public abstract class HttpContentDecoder extends MessageToMessageDecoder<HttpObj
|
||||
private void cleanup() {
|
||||
if (decoder != null) {
|
||||
// Clean-up the previous decoder if not cleaned up correctly.
|
||||
finishDecode(Unpooled.buffer());
|
||||
ByteBuf buf = Unpooled.buffer();
|
||||
finishDecode(buf);
|
||||
buf.release();
|
||||
}
|
||||
}
|
||||
|
||||
@ -236,6 +238,7 @@ public abstract class HttpContentDecoder extends MessageToMessageDecoder<HttpObj
|
||||
break;
|
||||
}
|
||||
out.writeBytes(buf);
|
||||
buf.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -708,8 +708,10 @@ public class HttpPostRequestEncoder implements ChunkedInput<HttpContent> {
|
||||
HttpContent chunk = nextChunk();
|
||||
if (request instanceof FullHttpRequest) {
|
||||
FullHttpRequest fullRequest = (FullHttpRequest) request;
|
||||
if (!fullRequest.content().equals(chunk.content())) {
|
||||
fullRequest.content().clear().writeBytes(chunk.content());
|
||||
ByteBuf chunkContent = chunk.content();
|
||||
if (fullRequest.content() != chunkContent) {
|
||||
fullRequest.content().clear().writeBytes(chunkContent);
|
||||
chunkContent.release();
|
||||
}
|
||||
return fullRequest;
|
||||
} else {
|
||||
|
@ -76,6 +76,10 @@ public class StringEncoder extends MessageToByteEncoder<CharSequence> {
|
||||
}
|
||||
|
||||
ByteBuf encoded = Unpooled.copiedBuffer(msg, charset);
|
||||
out.writeBytes(encoded);
|
||||
try {
|
||||
out.writeBytes(encoded);
|
||||
} finally {
|
||||
encoded.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,7 @@
|
||||
*/
|
||||
package io.netty.example.http.file;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import io.netty.channel.ChannelFuture;
|
||||
import io.netty.channel.ChannelFutureListener;
|
||||
@ -272,8 +273,9 @@ public class HttpStaticFileServerHandler extends SimpleChannelInboundHandler<Ful
|
||||
}
|
||||
|
||||
buf.append("</ul></body></html>\r\n");
|
||||
|
||||
response.content().writeBytes(Unpooled.copiedBuffer(buf, CharsetUtil.UTF_8));
|
||||
ByteBuf buffer = Unpooled.copiedBuffer(buf, CharsetUtil.UTF_8);
|
||||
response.content().writeBytes(buffer);
|
||||
buffer.release();
|
||||
|
||||
// Close the connection as soon as the error message is sent.
|
||||
ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
|
||||
|
@ -15,6 +15,7 @@
|
||||
*/
|
||||
package io.netty.example.http.websocketx.autobahn;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import io.netty.channel.ChannelFuture;
|
||||
import io.netty.channel.ChannelFutureListener;
|
||||
@ -122,7 +123,9 @@ public class AutobahnServerHandler extends ChannelInboundHandlerAdapter {
|
||||
ChannelHandlerContext ctx, FullHttpRequest req, FullHttpResponse res) {
|
||||
// Generate an error page if response getStatus code is not OK (200).
|
||||
if (res.getStatus().code() != 200) {
|
||||
res.content().writeBytes(Unpooled.copiedBuffer(res.getStatus().toString(), CharsetUtil.UTF_8));
|
||||
ByteBuf buf = Unpooled.copiedBuffer(res.getStatus().toString(), CharsetUtil.UTF_8);
|
||||
res.content().writeBytes(buf);
|
||||
buf.release();
|
||||
setContentLength(res, res.content().readableBytes());
|
||||
}
|
||||
|
||||
|
@ -135,7 +135,9 @@ public class WebSocketServerHandler extends SimpleChannelInboundHandler<Object>
|
||||
ChannelHandlerContext ctx, FullHttpRequest req, FullHttpResponse res) {
|
||||
// Generate an error page if response getStatus code is not OK (200).
|
||||
if (res.getStatus().code() != 200) {
|
||||
res.content().writeBytes(Unpooled.copiedBuffer(res.getStatus().toString(), CharsetUtil.UTF_8));
|
||||
ByteBuf buf = Unpooled.copiedBuffer(res.getStatus().toString(), CharsetUtil.UTF_8);
|
||||
res.content().writeBytes(buf);
|
||||
buf.release();
|
||||
setContentLength(res, res.content().readableBytes());
|
||||
}
|
||||
|
||||
|
@ -132,7 +132,9 @@ public class WebSocketSslServerHandler extends SimpleChannelInboundHandler<Objec
|
||||
ChannelHandlerContext ctx, FullHttpRequest req, FullHttpResponse res) {
|
||||
// Generate an error page if response getStatus code is not OK (200).
|
||||
if (res.getStatus().code() != 200) {
|
||||
res.content().writeBytes(Unpooled.copiedBuffer(res.getStatus().toString(), CharsetUtil.UTF_8));
|
||||
ByteBuf buf = Unpooled.copiedBuffer(res.getStatus().toString(), CharsetUtil.UTF_8);
|
||||
res.content().writeBytes(buf);
|
||||
buf.release();
|
||||
setContentLength(res, res.content().readableBytes());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user