From a29532df43c9db08db5dbc83f30bb7bd2e55a596 Mon Sep 17 00:00:00 2001 From: Aleksey Yeschenko Date: Sun, 16 Jun 2019 06:32:51 +0100 Subject: [PATCH] Fix ByteBufChecksum optimisation for CRC32 and Adler32 (#9242) Motivation: Because of a simple bug in ByteBufChecksum#updateByteBuffer(Checksum), ReflectiveByteBufChecksum is never used for CRC32 and Adler32, resulting in direct ByteBuffers being checksummed byte by byte, which is undesriable. Modification: Fix ByteBufChecksum#updateByteBuffer(Checksum) method to pass the correct argument to Method#invoke(Checksum, ByteBuffer). Result: ReflectiveByteBufChecksum will now be used for Adler32 and CRC32 on Java8+ and direct ByteBuffers will no longer be checksummed on slow byte-by-byte basis. --- .../io/netty/handler/codec/compression/ByteBufChecksum.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codec/src/main/java/io/netty/handler/codec/compression/ByteBufChecksum.java b/codec/src/main/java/io/netty/handler/codec/compression/ByteBufChecksum.java index 2aff623bd7..ffb827d26c 100644 --- a/codec/src/main/java/io/netty/handler/codec/compression/ByteBufChecksum.java +++ b/codec/src/main/java/io/netty/handler/codec/compression/ByteBufChecksum.java @@ -55,7 +55,7 @@ abstract class ByteBufChecksum implements Checksum { if (PlatformDependent.javaVersion() >= 8) { try { Method method = checksum.getClass().getDeclaredMethod("update", ByteBuffer.class); - method.invoke(method, ByteBuffer.allocate(1)); + method.invoke(checksum, ByteBuffer.allocate(1)); return method; } catch (Throwable ignore) { return null;