Add a hint of ownership transfer when calling EmbeddedChannel.read*() methods.

Motivation:

As shown in issues it is sometimes hard to understand why a leak was reported when the user just calles EmbeddedChannel.readInbound() / EmbeddedChannel.readOutbound() and drop the message on the floor.

Modifications:

Add a hint before handover the message to the user and transfer the ownership.

Result:

Easier debugging of leaks caused by EmbeddedChannel.read*().
This commit is contained in:
Norman Maurer 2017-12-19 16:10:14 +01:00
parent 1cf2687244
commit 0c5014b105

View File

@ -40,7 +40,6 @@ import io.netty.util.ReferenceCountUtil;
import io.netty.util.internal.ObjectUtil;
import io.netty.util.internal.PlatformDependent;
import io.netty.util.internal.RecyclableArrayList;
import io.netty.util.internal.UnstableApi;
import io.netty.util.internal.logging.InternalLogger;
import io.netty.util.internal.logging.InternalLoggerFactory;
@ -289,7 +288,11 @@ public class EmbeddedChannel extends AbstractChannel {
*/
@SuppressWarnings("unchecked")
public <T> T readInbound() {
return (T) poll(inboundMessages);
T message = (T) poll(inboundMessages);
if (message != null) {
ReferenceCountUtil.touch(message, "Caller of readInbound() will handle the message from this point");
}
return message;
}
/**
@ -297,7 +300,11 @@ public class EmbeddedChannel extends AbstractChannel {
*/
@SuppressWarnings("unchecked")
public <T> T readOutbound() {
return (T) poll(outboundMessages);
T message = (T) poll(outboundMessages);
if (message != null) {
ReferenceCountUtil.touch(message, "Caller of readOutbound() will handle the message from this point.");
}
return message;
}
/**