diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 1e3f64a2fb..dc3ec4c296 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -26,6 +26,8 @@ a pure JSON library. #1179: Allow configuring `DefaultPrettyPrinter` separators for empty Arrays and Objects (contributed by Guillaume L) +#1186: `BufferRecycler` should avoid setting replacement if one already returned, bigger + (suggested by @kkkkkhhhh) 2.16.2 (not yet released) diff --git a/src/main/java/com/fasterxml/jackson/core/util/BufferRecycler.java b/src/main/java/com/fasterxml/jackson/core/util/BufferRecycler.java index 4a8913161c..dc1aac9f21 100644 --- a/src/main/java/com/fasterxml/jackson/core/util/BufferRecycler.java +++ b/src/main/java/com/fasterxml/jackson/core/util/BufferRecycler.java @@ -145,7 +145,12 @@ public byte[] allocByteBuffer(int ix, int minSize) { } public void releaseByteBuffer(int ix, byte[] buffer) { - _byteBuffers.set(ix, buffer); + // 13-Jan-2024, tatu: [core#1186] Replace only if beneficial: + byte[] oldBuffer = _byteBuffers.get(ix); + if ((oldBuffer == null) || buffer.length > oldBuffer.length) { + // Could use CAS, but should not really matter + _byteBuffers.set(ix, buffer); + } } /* @@ -171,7 +176,12 @@ public char[] allocCharBuffer(int ix, int minSize) { } public void releaseCharBuffer(int ix, char[] buffer) { - _charBuffers.set(ix, buffer); + // 13-Jan-2024, tatu: [core#1186] Replace only if beneficial: + char[] oldBuffer = _charBuffers.get(ix); + if ((oldBuffer == null) || buffer.length > oldBuffer.length) { + // Could use CAS, but should not really matter + _charBuffers.set(ix, buffer); + } } /*