diff --git a/src/java/org/apache/cassandra/utils/FastByteOperations.java b/src/java/org/apache/cassandra/utils/FastByteOperations.java index b1514543d2..41f084d842 100644 --- a/src/java/org/apache/cassandra/utils/FastByteOperations.java +++ b/src/java/org/apache/cassandra/utils/FastByteOperations.java @@ -196,7 +196,6 @@ public class FastByteOperations { BYTE_ARRAY_BASE_OFFSET = theUnsafe.arrayBaseOffset(byte[].class); DIRECT_BUFFER_ADDRESS_OFFSET = theUnsafe.objectFieldOffset(Buffer.class.getDeclaredField("address")); - HEAP_HB_FIELD = theUnsafe.objectFieldOffset(ByteBuffer.class.getDeclaredField("hb")); } catch (Exception e) @@ -276,8 +275,8 @@ public class FastByteOperations // Heap ByteBuffer (Mutable) if (srcBuf.hasArray() && !srcBuf.isReadOnly()) { - src = theUnsafe.getObject(srcBuf, HEAP_HB_FIELD); - srcOffset = BYTE_ARRAY_BASE_OFFSET; + src = srcBuf.array(); + srcOffset = BYTE_ARRAY_BASE_OFFSET + srcBuf.arrayOffset(); } // Read-Only Heap ByteBuffer (Still has hb but read-only) else if (srcBuf.isReadOnly() && !srcBuf.isDirect()) diff --git a/test/unit/org/apache/cassandra/utils/Generators.java b/test/unit/org/apache/cassandra/utils/Generators.java index 5f99421240..41f3d99f0d 100644 --- a/test/unit/org/apache/cassandra/utils/Generators.java +++ b/test/unit/org/apache/cassandra/utils/Generators.java @@ -365,7 +365,7 @@ public final class Generators public static Gen bytes(int min, int max) { - return bytes(min, max, SourceDSL.arbitrary().constant(BBCases.HEAP)); + return bytes(min, max, SourceDSL.arbitrary().pick(BBCases.HEAP, BBCases.READ_ONLY_HEAP)); } public static Gen directBytes(int min, int max)