From 446d0c1026d04e77f03ba0b419d52a8d4030aa2a Mon Sep 17 00:00:00 2001 From: Jordan West Date: Sun, 13 Apr 2025 12:26:55 -0700 Subject: [PATCH] Don't allocate in ThreadLocalReadAheadBuffer#close() Patch by Jordan West; reviewed by [committers] for CASSANDRA-20551 --- .../io/util/ThreadLocalReadAheadBuffer.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/java/org/apache/cassandra/io/util/ThreadLocalReadAheadBuffer.java b/src/java/org/apache/cassandra/io/util/ThreadLocalReadAheadBuffer.java index 824acaa8d8..bc92407bef 100644 --- a/src/java/org/apache/cassandra/io/util/ThreadLocalReadAheadBuffer.java +++ b/src/java/org/apache/cassandra/io/util/ThreadLocalReadAheadBuffer.java @@ -131,18 +131,21 @@ public final class ThreadLocalReadAheadBuffer public void clear(boolean deallocate) { - Block block = getBlock(); + // avoid calling block() here to reduce unintended allocations + Block block = blockMap.get().get(channel.filePath()); + if (block == null) + return; + block.index = -1; + if (block.buffer == null) + return; ByteBuffer blockBuffer = block.buffer; - if (blockBuffer != null) + blockBuffer.clear(); + if (deallocate) { - blockBuffer.clear(); - if (deallocate) - { - FileUtils.clean(blockBuffer); - block.buffer = null; - } + FileUtils.clean(blockBuffer); + block.buffer = null; } }