From 57a0dbc89945e4e645bc57043efd46589d6f07a1 Mon Sep 17 00:00:00 2001 From: Sunil Ramchandra Pawar Date: Tue, 29 Jul 2025 21:17:33 +0530 Subject: [PATCH] Moving read only check condition at the end. --- .../cassandra/utils/FastByteOperations.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/java/org/apache/cassandra/utils/FastByteOperations.java b/src/java/org/apache/cassandra/utils/FastByteOperations.java index 1bd52a0bc9..4e452c0efc 100644 --- a/src/java/org/apache/cassandra/utils/FastByteOperations.java +++ b/src/java/org/apache/cassandra/utils/FastByteOperations.java @@ -283,25 +283,26 @@ public class FastByteOperations Object src; long srcOffset; + // Direct ByteBuffer + if (srcBuf.isDirect()) + { + src = null; + srcOffset = theUnsafe.getLong(srcBuf, DIRECT_BUFFER_ADDRESS_OFFSET); + } // Heap ByteBuffer (Mutable) - if (srcBuf.hasArray()) + else if (srcBuf.hasArray()) { 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()) + else { src = theUnsafe.getObject(srcBuf, HEAP_HB_FIELD_OFFSET); int arrayOffset = theUnsafe.getInt(srcBuf, HEAP_ARRAY_FIELD_OFFSET); srcOffset = BYTE_ARRAY_BASE_OFFSET + arrayOffset ; } // Direct ByteBuffer - else - { - src = null; - srcOffset = theUnsafe.getLong(srcBuf, DIRECT_BUFFER_ADDRESS_OFFSET); - } copy(src, srcOffset + srcPosition, trgBuf, trgPosition, length); }