diff --git a/buffer/src/main/java/io/netty/buffer/AbstractDerivedByteBuf.java b/buffer/src/main/java/io/netty/buffer/AbstractDerivedByteBuf.java index 4f27528fee..e385fa2c31 100644 --- a/buffer/src/main/java/io/netty/buffer/AbstractDerivedByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/AbstractDerivedByteBuf.java @@ -51,6 +51,12 @@ public abstract class AbstractDerivedByteBuf extends AbstractByteBuf { return this; } + @Override + public final ByteBuf touch(Object hint) { + unwrap().touch(hint); + return this; + } + @Override public final boolean release() { return unwrap().release(); diff --git a/buffer/src/main/java/io/netty/buffer/AbstractReferenceCountedByteBuf.java b/buffer/src/main/java/io/netty/buffer/AbstractReferenceCountedByteBuf.java index 30103821f9..06df36de74 100644 --- a/buffer/src/main/java/io/netty/buffer/AbstractReferenceCountedByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/AbstractReferenceCountedByteBuf.java @@ -95,7 +95,12 @@ public abstract class AbstractReferenceCountedByteBuf extends AbstractByteBuf { } @Override - public final ByteBuf touch() { + public ByteBuf touch() { + return this; + } + + @Override + public ByteBuf touch(Object hint) { return this; } diff --git a/buffer/src/main/java/io/netty/buffer/AdvancedLeakAwareByteBuf.java b/buffer/src/main/java/io/netty/buffer/AdvancedLeakAwareByteBuf.java index 837f50e619..1b136e88e4 100644 --- a/buffer/src/main/java/io/netty/buffer/AdvancedLeakAwareByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/AdvancedLeakAwareByteBuf.java @@ -706,6 +706,12 @@ final class AdvancedLeakAwareByteBuf extends WrappedByteBuf { return this; } + @Override + public ByteBuf touch(Object hint) { + leak.record(hint); + return this; + } + @Override public boolean release() { boolean deallocated = super.release(); diff --git a/buffer/src/main/java/io/netty/buffer/ByteBuf.java b/buffer/src/main/java/io/netty/buffer/ByteBuf.java index a1a5e3bce8..4d399c683e 100644 --- a/buffer/src/main/java/io/netty/buffer/ByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/ByteBuf.java @@ -1880,4 +1880,7 @@ public abstract class ByteBuf implements ReferenceCounted, Comparable { @Override public abstract ByteBuf touch(); + + @Override + public abstract ByteBuf touch(Object hint); } diff --git a/buffer/src/main/java/io/netty/buffer/ByteBufHolder.java b/buffer/src/main/java/io/netty/buffer/ByteBufHolder.java index 9cc2000dac..c78cb6a459 100644 --- a/buffer/src/main/java/io/netty/buffer/ByteBufHolder.java +++ b/buffer/src/main/java/io/netty/buffer/ByteBufHolder.java @@ -45,4 +45,7 @@ public interface ByteBufHolder extends ReferenceCounted { @Override ByteBufHolder touch(); + + @Override + ByteBufHolder touch(Object hint); } diff --git a/buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java b/buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java index a67cb3914f..a378a00024 100644 --- a/buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java @@ -1570,6 +1570,16 @@ public class CompositeByteBuf extends AbstractReferenceCountedByteBuf { return (CompositeByteBuf) super.retain(); } + @Override + public CompositeByteBuf touch() { + return (CompositeByteBuf) super.touch(); + } + + @Override + public CompositeByteBuf touch(Object hint) { + return (CompositeByteBuf) super.touch(hint); + } + @Override public ByteBuffer[] nioBuffers() { return nioBuffers(readerIndex(), readableBytes()); diff --git a/buffer/src/main/java/io/netty/buffer/DefaultByteBufHolder.java b/buffer/src/main/java/io/netty/buffer/DefaultByteBufHolder.java index 58676b8072..c029accedf 100644 --- a/buffer/src/main/java/io/netty/buffer/DefaultByteBufHolder.java +++ b/buffer/src/main/java/io/netty/buffer/DefaultByteBufHolder.java @@ -74,6 +74,12 @@ public class DefaultByteBufHolder implements ByteBufHolder { return this; } + @Override + public ByteBufHolder touch(Object hint) { + data.touch(hint); + return this; + } + @Override public boolean release() { return data.release(); diff --git a/buffer/src/main/java/io/netty/buffer/EmptyByteBuf.java b/buffer/src/main/java/io/netty/buffer/EmptyByteBuf.java index e84f28cc41..9f8db89741 100644 --- a/buffer/src/main/java/io/netty/buffer/EmptyByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/EmptyByteBuf.java @@ -836,6 +836,11 @@ public final class EmptyByteBuf extends ByteBuf { return this; } + @Override + public ByteBuf touch(Object hint) { + return this; + } + @Override public boolean release() { return false; diff --git a/buffer/src/main/java/io/netty/buffer/SimpleLeakAwareByteBuf.java b/buffer/src/main/java/io/netty/buffer/SimpleLeakAwareByteBuf.java index eea68e7151..0a9fe3f20b 100644 --- a/buffer/src/main/java/io/netty/buffer/SimpleLeakAwareByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/SimpleLeakAwareByteBuf.java @@ -34,6 +34,11 @@ final class SimpleLeakAwareByteBuf extends WrappedByteBuf { return this; } + @Override + public ByteBuf touch(Object hint) { + return this; + } + @Override public boolean release() { boolean deallocated = super.release(); diff --git a/buffer/src/main/java/io/netty/buffer/SwappedByteBuf.java b/buffer/src/main/java/io/netty/buffer/SwappedByteBuf.java index fcfbbda999..a11538117e 100644 --- a/buffer/src/main/java/io/netty/buffer/SwappedByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/SwappedByteBuf.java @@ -820,6 +820,12 @@ public final class SwappedByteBuf extends ByteBuf { return this; } + @Override + public ByteBuf touch(Object hint) { + buf.touch(hint); + return this; + } + @Override public boolean release() { return buf.release(); diff --git a/buffer/src/main/java/io/netty/buffer/UnreleasableByteBuf.java b/buffer/src/main/java/io/netty/buffer/UnreleasableByteBuf.java index 402c0d863d..2b26f29137 100644 --- a/buffer/src/main/java/io/netty/buffer/UnreleasableByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/UnreleasableByteBuf.java @@ -80,6 +80,11 @@ final class UnreleasableByteBuf extends WrappedByteBuf { return this; } + @Override + public ByteBuf touch(Object hint) { + return this; + } + @Override public boolean release() { return false; diff --git a/buffer/src/main/java/io/netty/buffer/WrappedByteBuf.java b/buffer/src/main/java/io/netty/buffer/WrappedByteBuf.java index dad117bd82..a528ee8305 100644 --- a/buffer/src/main/java/io/netty/buffer/WrappedByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/WrappedByteBuf.java @@ -805,6 +805,12 @@ class WrappedByteBuf extends ByteBuf { return this; } + @Override + public ByteBuf touch(Object hint) { + buf.touch(hint); + return this; + } + @Override public boolean isReadable(int size) { return buf.isReadable(size); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/ComposedLastHttpContent.java b/codec-http/src/main/java/io/netty/handler/codec/http/ComposedLastHttpContent.java index 9db7eaa48c..f38687efd5 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/ComposedLastHttpContent.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/ComposedLastHttpContent.java @@ -54,6 +54,11 @@ final class ComposedLastHttpContent implements LastHttpContent { return this; } + @Override + public LastHttpContent touch(Object hint) { + return this; + } + @Override public LastHttpContent duplicate() { return copy(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultFullHttpRequest.java b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultFullHttpRequest.java index 925e59781a..d414368a0a 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultFullHttpRequest.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultFullHttpRequest.java @@ -78,6 +78,12 @@ public class DefaultFullHttpRequest extends DefaultHttpRequest implements FullHt return this; } + @Override + public FullHttpRequest touch(Object hint) { + content.touch(hint); + return this; + } + @Override public boolean release() { return content.release(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultFullHttpResponse.java b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultFullHttpResponse.java index 88f8803320..5a148a1cb2 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultFullHttpResponse.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultFullHttpResponse.java @@ -80,6 +80,12 @@ public class DefaultFullHttpResponse extends DefaultHttpResponse implements Full return this; } + @Override + public FullHttpResponse touch(Object hint) { + content.touch(hint); + return this; + } + @Override public boolean release() { return content.release(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultHttpContent.java b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultHttpContent.java index 38fe913917..b366cb43a8 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultHttpContent.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultHttpContent.java @@ -73,6 +73,12 @@ public class DefaultHttpContent extends DefaultHttpObject implements HttpContent return this; } + @Override + public HttpContent touch(Object hint) { + content.touch(hint); + return this; + } + @Override public boolean release() { return content.release(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultLastHttpContent.java b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultLastHttpContent.java index 2e2da7e756..bb0ad08ef8 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultLastHttpContent.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultLastHttpContent.java @@ -75,6 +75,12 @@ public class DefaultLastHttpContent extends DefaultHttpContent implements LastHt return this; } + @Override + public LastHttpContent touch(Object hint) { + super.touch(hint); + return this; + } + @Override public HttpHeaders trailingHeaders() { return trailingHeaders; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpMessage.java b/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpMessage.java index 1c2b4e53c4..c9a59032d8 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpMessage.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpMessage.java @@ -32,6 +32,9 @@ public interface FullHttpMessage extends HttpMessage, LastHttpContent { @Override FullHttpMessage touch(); + @Override + FullHttpMessage touch(Object hint); + @Override FullHttpMessage duplicate(); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpRequest.java b/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpRequest.java index 708eb11bdb..1de15faaee 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpRequest.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpRequest.java @@ -32,6 +32,9 @@ public interface FullHttpRequest extends HttpRequest, FullHttpMessage { @Override FullHttpRequest touch(); + @Override + FullHttpRequest touch(Object hint); + @Override FullHttpRequest duplicate(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpResponse.java b/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpResponse.java index 42d7d8e6e7..f3b7496f73 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpResponse.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/FullHttpResponse.java @@ -32,6 +32,9 @@ public interface FullHttpResponse extends HttpResponse, FullHttpMessage { @Override FullHttpResponse touch(); + @Override + FullHttpResponse touch(Object hint); + @Override FullHttpResponse duplicate(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContent.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContent.java index 3448101d4d..de702742a7 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContent.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContent.java @@ -41,4 +41,7 @@ public interface HttpContent extends HttpObject, ByteBufHolder { @Override HttpContent touch(); + + @Override + HttpContent touch(Object hint); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/LastHttpContent.java b/codec-http/src/main/java/io/netty/handler/codec/http/LastHttpContent.java index aea6539244..2f68e10c16 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/LastHttpContent.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/LastHttpContent.java @@ -79,6 +79,11 @@ public interface LastHttpContent extends HttpContent { return this; } + @Override + public LastHttpContent touch(Object hint) { + return this; + } + @Override public boolean release() { return false; @@ -109,6 +114,9 @@ public interface LastHttpContent extends HttpContent { @Override LastHttpContent touch(); + @Override + LastHttpContent touch(Object hint); + @Override LastHttpContent duplicate(); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractDiskHttpData.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractDiskHttpData.java index cc4578b4ee..9130d33f4d 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractDiskHttpData.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractDiskHttpData.java @@ -401,4 +401,9 @@ public abstract class AbstractDiskHttpData extends AbstractHttpData { public HttpData touch() { return this; } + + @Override + public HttpData touch(Object hint) { + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractHttpData.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractHttpData.java index 5d0dc082cc..ae16b2a627 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractHttpData.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractHttpData.java @@ -133,4 +133,7 @@ public abstract class AbstractHttpData extends AbstractReferenceCounted implemen @Override public abstract HttpData touch(); + + @Override + public abstract HttpData touch(Object hint); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractMemoryHttpData.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractMemoryHttpData.java index a28fa35a52..e0870e11f6 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractMemoryHttpData.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/AbstractMemoryHttpData.java @@ -260,8 +260,13 @@ public abstract class AbstractMemoryHttpData extends AbstractHttpData { @Override public HttpData touch() { + return touch(null); + } + + @Override + public HttpData touch(Object hint) { if (byteBuf != null) { - byteBuf.touch(); + byteBuf.touch(hint); } return this; } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/Attribute.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/Attribute.java index 253f4d9de5..a2060e7327 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/Attribute.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/Attribute.java @@ -45,4 +45,7 @@ public interface Attribute extends HttpData { @Override Attribute touch(); + + @Override + Attribute touch(Object hint); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskAttribute.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskAttribute.java index 7740338472..5c800bdd46 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskAttribute.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskAttribute.java @@ -198,4 +198,10 @@ public class DiskAttribute extends AbstractDiskHttpData implements Attribute { super.touch(); return this; } + + @Override + public Attribute touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskFileUpload.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskFileUpload.java index 31fb31f095..41afd2ca9d 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskFileUpload.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskFileUpload.java @@ -217,4 +217,10 @@ public class DiskFileUpload extends AbstractDiskHttpData implements FileUpload { super.touch(); return this; } + + @Override + public FileUpload touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/FileUpload.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/FileUpload.java index 3688f01f00..f519cf5c90 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/FileUpload.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/FileUpload.java @@ -70,4 +70,7 @@ public interface FileUpload extends HttpData { @Override FileUpload touch(); + + @Override + FileUpload touch(Object hint); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpData.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpData.java index de59bffb22..85ad3e6712 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpData.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpData.java @@ -211,4 +211,7 @@ public interface HttpData extends InterfaceHttpData, ByteBufHolder { @Override HttpData touch(); + + @Override + HttpData touch(Object hint); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java index 9473ed2d21..796619bd41 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java @@ -1221,6 +1221,12 @@ public class HttpPostRequestEncoder implements ChunkedInput { return this; } + @Override + public FullHttpRequest touch(Object hint) { + content.touch(hint); + return this; + } + @Override public ByteBuf content() { return content.content(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/InterfaceHttpData.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/InterfaceHttpData.java index c4d98cff4d..2b9cb61e96 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/InterfaceHttpData.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/InterfaceHttpData.java @@ -44,4 +44,7 @@ public interface InterfaceHttpData extends Comparable, Refere @Override InterfaceHttpData touch(); + + @Override + InterfaceHttpData touch(Object hint); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/InternalAttribute.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/InternalAttribute.java index 3429191369..b0b034f779 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/InternalAttribute.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/InternalAttribute.java @@ -149,4 +149,12 @@ final class InternalAttribute extends AbstractReferenceCounted implements Interf } return this; } + + @Override + public InterfaceHttpData touch(Object hint) { + for (ByteBuf buf: value) { + buf.touch(hint); + } + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryAttribute.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryAttribute.java index 001306203c..23d5730d16 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryAttribute.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryAttribute.java @@ -159,4 +159,10 @@ public class MemoryAttribute extends AbstractMemoryHttpData implements Attribute super.touch(); return this; } + + @Override + public Attribute touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryFileUpload.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryFileUpload.java index 51bde2bd13..6100629b3b 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryFileUpload.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryFileUpload.java @@ -177,4 +177,10 @@ public class MemoryFileUpload extends AbstractMemoryHttpData implements FileUplo super.touch(); return this; } + + @Override + public FileUpload touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MixedAttribute.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MixedAttribute.java index fc3d5247aa..63299018ac 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MixedAttribute.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MixedAttribute.java @@ -285,6 +285,12 @@ public class MixedAttribute implements Attribute { return this; } + @Override + public Attribute touch(Object hint) { + attribute.touch(hint); + return this; + } + @Override public boolean release() { return attribute.release(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MixedFileUpload.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MixedFileUpload.java index 1de4b6dcf0..1d462ce96f 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MixedFileUpload.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MixedFileUpload.java @@ -316,6 +316,12 @@ public class MixedFileUpload implements FileUpload { return this; } + @Override + public FileUpload touch(Object hint) { + fileUpload.touch(hint); + return this; + } + @Override public boolean release() { return fileUpload.release(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/BinaryWebSocketFrame.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/BinaryWebSocketFrame.java index 1174075ee9..f3ce587d6b 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/BinaryWebSocketFrame.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/BinaryWebSocketFrame.java @@ -81,4 +81,10 @@ public class BinaryWebSocketFrame extends WebSocketFrame { super.touch(); return this; } + + @Override + public BinaryWebSocketFrame touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/CloseWebSocketFrame.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/CloseWebSocketFrame.java index d9ed199403..8b060f6681 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/CloseWebSocketFrame.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/CloseWebSocketFrame.java @@ -165,4 +165,10 @@ public class CloseWebSocketFrame extends WebSocketFrame { super.touch(); return this; } + + @Override + public CloseWebSocketFrame touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/ContinuationWebSocketFrame.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/ContinuationWebSocketFrame.java index 59745df9f5..90b3041199 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/ContinuationWebSocketFrame.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/ContinuationWebSocketFrame.java @@ -146,4 +146,10 @@ public class ContinuationWebSocketFrame extends WebSocketFrame { super.touch(); return this; } + + @Override + public ContinuationWebSocketFrame touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/PingWebSocketFrame.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/PingWebSocketFrame.java index 7576d11eb2..49a10ac644 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/PingWebSocketFrame.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/PingWebSocketFrame.java @@ -81,4 +81,10 @@ public class PingWebSocketFrame extends WebSocketFrame { super.touch(); return this; } + + @Override + public PingWebSocketFrame touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/PongWebSocketFrame.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/PongWebSocketFrame.java index 13ddc77eee..b96c815d98 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/PongWebSocketFrame.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/PongWebSocketFrame.java @@ -81,4 +81,10 @@ public class PongWebSocketFrame extends WebSocketFrame { super.touch(); return this; } + + @Override + public PongWebSocketFrame touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/TextWebSocketFrame.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/TextWebSocketFrame.java index 97c2bfb0a0..7dca7ba87f 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/TextWebSocketFrame.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/TextWebSocketFrame.java @@ -121,4 +121,10 @@ public class TextWebSocketFrame extends WebSocketFrame { super.touch(); return this; } + + @Override + public TextWebSocketFrame touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketFrame.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketFrame.java index 70dd7e1ed4..c46eec82bd 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketFrame.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketFrame.java @@ -88,4 +88,10 @@ public abstract class WebSocketFrame extends DefaultByteBufHolder { super.touch(); return this; } + + @Override + public WebSocketFrame touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/spdy/DefaultSpdyDataFrame.java b/codec-http/src/main/java/io/netty/handler/codec/spdy/DefaultSpdyDataFrame.java index 9f2aba9fda..10ef5612fa 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/spdy/DefaultSpdyDataFrame.java +++ b/codec-http/src/main/java/io/netty/handler/codec/spdy/DefaultSpdyDataFrame.java @@ -115,6 +115,12 @@ public class DefaultSpdyDataFrame extends DefaultSpdyStreamFrame implements Spdy return this; } + @Override + public SpdyDataFrame touch(Object hint) { + data.touch(hint); + return this; + } + @Override public boolean release() { return data.release(); diff --git a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyDataFrame.java b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyDataFrame.java index 503956f5dd..e37d655a0d 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyDataFrame.java +++ b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyDataFrame.java @@ -53,4 +53,7 @@ public interface SpdyDataFrame extends ByteBufHolder, SpdyStreamFrame { @Override SpdyDataFrame touch(); + + @Override + SpdyDataFrame touch(Object hint); } diff --git a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/DefaultLastMemcacheContent.java b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/DefaultLastMemcacheContent.java index ee570cb740..6785427878 100644 --- a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/DefaultLastMemcacheContent.java +++ b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/DefaultLastMemcacheContent.java @@ -50,6 +50,12 @@ public class DefaultLastMemcacheContent extends DefaultMemcacheContent implement return this; } + @Override + public LastMemcacheContent touch(Object hint) { + super.touch(hint); + return this; + } + @Override public LastMemcacheContent copy() { return new DefaultLastMemcacheContent(content().copy()); diff --git a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/DefaultMemcacheContent.java b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/DefaultMemcacheContent.java index e576269a8a..2923c02d7c 100644 --- a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/DefaultMemcacheContent.java +++ b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/DefaultMemcacheContent.java @@ -73,6 +73,12 @@ public class DefaultMemcacheContent extends AbstractMemcacheObject implements Me return this; } + @Override + public MemcacheContent touch(Object hint) { + content.touch(hint); + return this; + } + @Override public boolean release() { return content.release(); diff --git a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/FullMemcacheMessage.java b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/FullMemcacheMessage.java index 5293b43322..3ae0616b9d 100644 --- a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/FullMemcacheMessage.java +++ b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/FullMemcacheMessage.java @@ -33,6 +33,9 @@ public interface FullMemcacheMessage extends MemcacheMessage, LastMemcacheConten @Override FullMemcacheMessage touch(); + @Override + FullMemcacheMessage touch(Object hint); + @Override FullMemcacheMessage duplicate(); } diff --git a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/LastMemcacheContent.java b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/LastMemcacheContent.java index 3f9196c66e..0369a3c768 100644 --- a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/LastMemcacheContent.java +++ b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/LastMemcacheContent.java @@ -50,6 +50,11 @@ public interface LastMemcacheContent extends MemcacheContent { return this; } + @Override + public LastMemcacheContent touch(Object hint) { + return this; + } + @Override public LastMemcacheContent duplicate() { return this; @@ -98,6 +103,9 @@ public interface LastMemcacheContent extends MemcacheContent { @Override LastMemcacheContent touch(); + @Override + LastMemcacheContent touch(Object hint); + @Override LastMemcacheContent duplicate(); } diff --git a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/MemcacheContent.java b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/MemcacheContent.java index 3f51ff37d7..86466e8389 100644 --- a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/MemcacheContent.java +++ b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/MemcacheContent.java @@ -42,4 +42,7 @@ public interface MemcacheContent extends MemcacheObject, ByteBufHolder { @Override MemcacheContent touch(); + + @Override + MemcacheContent touch(Object hint); } diff --git a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/MemcacheMessage.java b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/MemcacheMessage.java index fa5c464928..fdc096a301 100644 --- a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/MemcacheMessage.java +++ b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/MemcacheMessage.java @@ -36,4 +36,7 @@ public interface MemcacheMessage extends MemcacheObject, ReferenceCounted { @Override MemcacheMessage touch(); + + @Override + MemcacheMessage touch(Object hint); } diff --git a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/AbstractBinaryMemcacheMessage.java b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/AbstractBinaryMemcacheMessage.java index f748f1cb69..0a80a3401e 100644 --- a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/AbstractBinaryMemcacheMessage.java +++ b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/AbstractBinaryMemcacheMessage.java @@ -110,8 +110,13 @@ public abstract class AbstractBinaryMemcacheMessage touch() { + return touch(null); + } + + @Override + public BinaryMemcacheMessage touch(Object hint) { if (extras != null) { - extras.touch(); + extras.touch(hint); } return this; } diff --git a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/BinaryMemcacheMessage.java b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/BinaryMemcacheMessage.java index e6492c7711..799750da79 100644 --- a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/BinaryMemcacheMessage.java +++ b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/BinaryMemcacheMessage.java @@ -66,4 +66,7 @@ public interface BinaryMemcacheMessage ex @Override BinaryMemcacheMessage touch(); + + @Override + BinaryMemcacheMessage touch(Object hint); } diff --git a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/BinaryMemcacheRequest.java b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/BinaryMemcacheRequest.java index 41947c607f..d85da21132 100644 --- a/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/BinaryMemcacheRequest.java +++ b/codec-memcache/src/main/java/io/netty/handler/codec/memcache/binary/BinaryMemcacheRequest.java @@ -36,4 +36,7 @@ public interface BinaryMemcacheRequest extends BinaryMemcacheMessage T touch(T msg, Object hint) { + if (msg instanceof ReferenceCounted) { + return (T) ((ReferenceCounted) msg).touch(hint); + } + return msg; + } + /** * Try to call {@link ReferenceCounted#release()} if the specified message implements {@link ReferenceCounted}. * If the specified message doesn't implement {@link ReferenceCounted}, this method does nothing. diff --git a/common/src/main/java/io/netty/util/ReferenceCounted.java b/common/src/main/java/io/netty/util/ReferenceCounted.java index bb1850a8c6..7de7b5bef6 100644 --- a/common/src/main/java/io/netty/util/ReferenceCounted.java +++ b/common/src/main/java/io/netty/util/ReferenceCounted.java @@ -48,10 +48,17 @@ public interface ReferenceCounted { /** * Records the current access location of this object for debugging purposes. * If this object is determined to be leaked, the information recorded by this operation will be provided to you - * via {@link ResourceLeakDetector}. + * via {@link ResourceLeakDetector}. This method is a shortcut to {@link #touch(Object) touch(null)}. */ ReferenceCounted touch(); + /** + * Records the current access location of this object with an additonal arbitrary information for debugging + * purposes. If this object is determined to be leaked, the information recorded by this operation will be + * provided to you via {@link ResourceLeakDetector}. + */ + ReferenceCounted touch(Object hint); + /** * Decreases the reference count by {@code 1} and deallocates this object if the reference count reaches at * {@code 0}. diff --git a/common/src/main/java/io/netty/util/ResourceLeak.java b/common/src/main/java/io/netty/util/ResourceLeak.java index d45fc71f28..e3b10bd128 100644 --- a/common/src/main/java/io/netty/util/ResourceLeak.java +++ b/common/src/main/java/io/netty/util/ResourceLeak.java @@ -19,10 +19,16 @@ package io.netty.util; public interface ResourceLeak { /** * Records the caller's current stack trace so that the {@link ResourceLeakDetector} can tell where the leaked - * resource was accessed lastly. + * resource was accessed lastly. This method is a shortcut to {@link #record(Object) record(null)}. */ void record(); + /** + * Records the caller's current stack trace and the specified additional arbitrary information + * so that the {@link ResourceLeakDetector} can tell where the leaked resource was accessed lastly. + */ + void record(Object hint); + /** * Close the leak so that {@link ResourceLeakDetector} does not warn about leaked resources. * diff --git a/common/src/main/java/io/netty/util/ResourceLeakDetector.java b/common/src/main/java/io/netty/util/ResourceLeakDetector.java index 51a199b383..e1d771b1e3 100644 --- a/common/src/main/java/io/netty/util/ResourceLeakDetector.java +++ b/common/src/main/java/io/netty/util/ResourceLeakDetector.java @@ -265,7 +265,7 @@ public final class ResourceLeakDetector { if (referent != null) { Level level = getLevel(); if (level.ordinal() >= Level.ADVANCED.ordinal()) { - creationRecord = newRecord(3); + creationRecord = newRecord(null, 3); } else { creationRecord = null; } @@ -287,8 +287,17 @@ public final class ResourceLeakDetector { @Override public void record() { + record0(null, 3); + } + + @Override + public void record(Object hint) { + record0(hint, 3); + } + + private void record0(Object hint, int recordsToSkip) { if (creationRecord != null) { - String value = newRecord(2); + String value = newRecord(hint, recordsToSkip); synchronized (lastRecords) { int size = lastRecords.size(); @@ -353,11 +362,27 @@ public final class ResourceLeakDetector { } private static final String[] STACK_TRACE_ELEMENT_EXCLUSIONS = { + "io.netty.util.ReferenceCountUtil.touch(", + "io.netty.buffer.AdvancedLeakAwareByteBuf.touch(", "io.netty.buffer.AbstractByteBufAllocator.toLeakAwareBuffer(", }; - static String newRecord(int recordsToSkip) { + static String newRecord(Object hint, int recordsToSkip) { StringBuilder buf = new StringBuilder(4096); + + // Append the hint first if available. + if (hint != null) { + buf.append("\tHint: "); + // Prefer a hint string to a simple string form. + if (hint instanceof ResourceLeakHint) { + buf.append(((ResourceLeakHint) hint).toHintString()); + } else { + buf.append(hint); + } + buf.append(NEWLINE); + } + + // Append the stack trace. StackTraceElement[] array = new Throwable().getStackTrace(); for (StackTraceElement e: array) { if (recordsToSkip > 0) { diff --git a/common/src/main/java/io/netty/util/ResourceLeakHint.java b/common/src/main/java/io/netty/util/ResourceLeakHint.java new file mode 100644 index 0000000000..f25d1296f9 --- /dev/null +++ b/common/src/main/java/io/netty/util/ResourceLeakHint.java @@ -0,0 +1,27 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.util; + +/** + * A hint object that provides human-readable message for easier resource leak tracking. + */ +public interface ResourceLeakHint { + /** + * Returns a human-readable message that potentially enables easier resource leak tracking. + */ + String toHintString(); +} diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpMessage.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpMessage.java index 6a6e2f837c..221a159e38 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpMessage.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpMessage.java @@ -158,6 +158,12 @@ public final class SctpMessage extends DefaultByteBufHolder { return this; } + @Override + public SctpMessage touch(Object hint) { + super.touch(hint); + return this; + } + @Override public String toString() { if (refCnt() == 0) { diff --git a/transport-udt/src/main/java/io/netty/channel/udt/UdtMessage.java b/transport-udt/src/main/java/io/netty/channel/udt/UdtMessage.java index 7f061b19e7..d8662444be 100644 --- a/transport-udt/src/main/java/io/netty/channel/udt/UdtMessage.java +++ b/transport-udt/src/main/java/io/netty/channel/udt/UdtMessage.java @@ -58,4 +58,10 @@ public final class UdtMessage extends DefaultByteBufHolder { super.touch(); return this; } + + @Override + public UdtMessage touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/transport/src/main/java/io/netty/channel/AddressedEnvelope.java b/transport/src/main/java/io/netty/channel/AddressedEnvelope.java index ba159f9d1e..b5ce89f549 100644 --- a/transport/src/main/java/io/netty/channel/AddressedEnvelope.java +++ b/transport/src/main/java/io/netty/channel/AddressedEnvelope.java @@ -41,4 +41,16 @@ public interface AddressedEnvelope extends Reference * Returns the address of the recipient of this message. */ A recipient(); + + @Override + AddressedEnvelope retain(); + + @Override + AddressedEnvelope retain(int increment); + + @Override + AddressedEnvelope touch(); + + @Override + AddressedEnvelope touch(Object hint); } diff --git a/transport/src/main/java/io/netty/channel/DefaultAddressedEnvelope.java b/transport/src/main/java/io/netty/channel/DefaultAddressedEnvelope.java index a54d866a45..bc561399f4 100644 --- a/transport/src/main/java/io/netty/channel/DefaultAddressedEnvelope.java +++ b/transport/src/main/java/io/netty/channel/DefaultAddressedEnvelope.java @@ -108,6 +108,12 @@ public class DefaultAddressedEnvelope implements Add return this; } + @Override + public AddressedEnvelope touch(Object hint) { + ReferenceCountUtil.touch(message, hint); + return this; + } + @Override public String toString() { if (sender != null) { diff --git a/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java b/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java index f2e5e5c564..1aa469b269 100644 --- a/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java +++ b/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java @@ -20,6 +20,7 @@ import io.netty.util.Attribute; import io.netty.util.AttributeKey; import io.netty.util.Recycler; import io.netty.util.ReferenceCountUtil; +import io.netty.util.ResourceLeakHint; import io.netty.util.concurrent.EventExecutor; import io.netty.util.concurrent.EventExecutorGroup; import io.netty.util.internal.StringUtil; @@ -28,7 +29,7 @@ import java.net.SocketAddress; import static io.netty.channel.DefaultChannelPipeline.*; -final class DefaultChannelHandlerContext implements ChannelHandlerContext { +final class DefaultChannelHandlerContext implements ChannelHandlerContext, ResourceLeakHint { volatile DefaultChannelHandlerContext next; volatile DefaultChannelHandlerContext prev; @@ -329,8 +330,8 @@ final class DefaultChannelHandlerContext implements ChannelHandlerContext { throw new NullPointerException("msg"); } - ReferenceCountUtil.touch(msg); final DefaultChannelHandlerContext next = findContextInbound(); + ReferenceCountUtil.touch(msg, next); EventExecutor executor = next.executor(); if (executor.inEventLoop()) { next.invokeChannelRead(msg); @@ -706,8 +707,8 @@ final class DefaultChannelHandlerContext implements ChannelHandlerContext { private void write(Object msg, boolean flush, ChannelPromise promise) { - ReferenceCountUtil.touch(msg); DefaultChannelHandlerContext next = findContextOutbound(); + ReferenceCountUtil.touch(msg, next); EventExecutor executor = next.executor(); if (executor.inEventLoop()) { next.invokeWrite(msg, promise); @@ -987,4 +988,14 @@ final class DefaultChannelHandlerContext implements ChannelHandlerContext { RECYCLER.recycle(this, handle); } } + + @Override + public String toHintString() { + return '\'' + name + "' will handle the message from this point."; + } + + @Override + public String toString() { + return StringUtil.simpleClassName(ChannelHandlerContext.class) + '(' + name + ", " + channel + ')'; + } } diff --git a/transport/src/main/java/io/netty/channel/DefaultFileRegion.java b/transport/src/main/java/io/netty/channel/DefaultFileRegion.java index 7e1b97fcec..75ef56a9f0 100644 --- a/transport/src/main/java/io/netty/channel/DefaultFileRegion.java +++ b/transport/src/main/java/io/netty/channel/DefaultFileRegion.java @@ -121,4 +121,9 @@ public class DefaultFileRegion extends AbstractReferenceCounted implements FileR public FileRegion touch() { return this; } + + @Override + public FileRegion touch(Object hint) { + return this; + } } diff --git a/transport/src/main/java/io/netty/channel/FileRegion.java b/transport/src/main/java/io/netty/channel/FileRegion.java index c192ffbc16..77c467c213 100644 --- a/transport/src/main/java/io/netty/channel/FileRegion.java +++ b/transport/src/main/java/io/netty/channel/FileRegion.java @@ -89,4 +89,7 @@ public interface FileRegion extends ReferenceCounted { @Override FileRegion touch(); + + @Override + FileRegion touch(Object hint); } diff --git a/transport/src/main/java/io/netty/channel/socket/DatagramPacket.java b/transport/src/main/java/io/netty/channel/socket/DatagramPacket.java index 62359cb0a5..475285199a 100644 --- a/transport/src/main/java/io/netty/channel/socket/DatagramPacket.java +++ b/transport/src/main/java/io/netty/channel/socket/DatagramPacket.java @@ -69,4 +69,10 @@ public final class DatagramPacket super.touch(); return this; } + + @Override + public DatagramPacket touch(Object hint) { + super.touch(hint); + return this; + } } diff --git a/transport/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java b/transport/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java index 049826228e..2dd3d9701c 100644 --- a/transport/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java +++ b/transport/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java @@ -108,7 +108,7 @@ public class DefaultChannelPipelineTest { } @Override - public ReferenceCounted touch() { + public ReferenceCounted touch(Object hint) { return this; } };