CodecOutputList should be recycled in a finally block (#10186)

Motivation:

To ensure we always recycle the CodecOutputList we should better do it in a finally block

Modifications:

Call CodecOutputList.recycle() in finally

Result:

Less chances of non-recycled lists. Related to https://github.com/netty/netty/issues/10183
This commit is contained in:
Norman Maurer 2020-04-15 09:08:19 +02:00
parent fc61dbe188
commit 25607c0d83

View File

@ -92,9 +92,6 @@ public abstract class MessageToMessageEncoder<I> extends ChannelHandlerAdapter {
}
if (out.isEmpty()) {
out.recycle();
out = null;
throw new EncoderException(
StringUtil.simpleClassName(this) + " must produce at least one message.");
}
@ -107,6 +104,7 @@ public abstract class MessageToMessageEncoder<I> extends ChannelHandlerAdapter {
throw new EncoderException(t);
} finally {
if (out != null) {
try {
final int sizeMinusOne = out.size() - 1;
if (sizeMinusOne == 0) {
ctx.write(out.getUnsafe(0), promise);
@ -119,10 +117,12 @@ public abstract class MessageToMessageEncoder<I> extends ChannelHandlerAdapter {
writePromiseCombiner(ctx, out, promise);
}
}
} finally {
out.recycle();
}
}
}
}
private static void writeVoidPromise(ChannelHandlerContext ctx, CodecOutputList out) {
final ChannelPromise voidPromise = ctx.voidPromise();