diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index a4649cbdf..c6424ac58 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -14,6 +14,10 @@ Active maintainers: === Releases === ------------------------------------------------------------------------ +2.16.0 (not yet released) + +#403: Remove Smile-specific buffer-recycling + 2.15.3 (not yet released) #384: `Smile` decoding issue with `NonBlockingByteArrayParser`, concurrency diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileBufferRecycler.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileBufferRecycler.java deleted file mode 100644 index 1782edc73..000000000 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileBufferRecycler.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.fasterxml.jackson.dataformat.smile; - -import java.util.concurrent.atomic.AtomicReference; - -import com.fasterxml.jackson.dataformat.smile.SmileGenerator.SharedStringNode; - -/** - * Simple helper class used for implementing simple reuse system for Smile-specific - * buffers that are used. - */ -public class SmileBufferRecycler -{ - public final static int DEFAULT_NAME_BUFFER_LENGTH = 64; - - public final static int DEFAULT_STRING_VALUE_BUFFER_LENGTH = 64; - - // // // Input side - - protected final AtomicReference _seenNamesReadBuffer = new AtomicReference<>(); - - protected final AtomicReference _seenStringValuesReadBuffer = new AtomicReference<>(); - - // // // Output side - - protected final AtomicReference _seenNamesWriteBuffer = new AtomicReference<>(); - - protected final AtomicReference _seenStringValuesWriteBuffer = new AtomicReference<>(); - - - public SmileBufferRecycler() { } - - // // // Input side - - public String[] allocSeenNamesReadBuffer() { - return _seenNamesReadBuffer.getAndSet(null); - } - - public String[] allocSeenStringValuesReadBuffer() { - return _seenStringValuesReadBuffer.getAndSet(null); - } - - public void releaseSeenNamesReadBuffer(String[] buffer) { - _seenNamesReadBuffer.set(buffer); - } - - public void releaseSeenStringValuesReadBuffer(String[] buffer) { - _seenStringValuesReadBuffer.set(buffer); - } - - // // // Output side - - public SharedStringNode[] allocSeenNamesWriteBuffer() { - return _seenNamesWriteBuffer.getAndSet(null); - } - - public SharedStringNode[] allocSeenStringValuesWriteBuffer() { - return _seenStringValuesWriteBuffer.getAndSet(null); - } - - public void releaseSeenNamesWriteBuffer(SharedStringNode[] buffer) { - _seenNamesWriteBuffer.set(buffer); - } - - public void releaseSeenStringValuesWriteBuffer(SharedStringNode[] buffer) { - _seenStringValuesWriteBuffer.set(buffer); - } -} diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java index 1f663724f..616032ce4 100644 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java +++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java @@ -73,19 +73,6 @@ public class SmileFactory extends JsonFactory protected int _smileParserFeatures; protected int _smileGeneratorFeatures; - /* - /********************************************************** - /* Smile-specific buffer recycling (moved here in 2.16) - /********************************************************** - - /** - * This ThreadLocal contains a {@link java.lang.ref.SoftReference} - * to a buffer recycler used to provide a low-cost - * buffer recycling for Smile-specific buffers. - */ - final protected static ThreadLocal> _smileRecyclerRef - = new ThreadLocal>(); - /* /********************************************************** /* Factory construction, configuration @@ -429,8 +416,7 @@ public NonBlockingByteArrayParser createNonBlockingByteArrayParser() throws IOEx // 13-Mar-2021, tatu: [dataformats-binary#252] Leave async parser with // always-canonicalizing, for now (2.13) -- to be improved in future ByteQuadsCanonicalizer can = _byteSymbolCanonicalizer.makeChildOrPlaceholder(_factoryFeatures); - return new NonBlockingByteArrayParser(ctxt, _parserFeatures, _smileParserFeatures, can, - _smileBufferRecycler()); + return new NonBlockingByteArrayParser(ctxt, _parserFeatures, _smileParserFeatures, can); } /* @@ -447,8 +433,7 @@ protected SmileParser _createParser(InputStream in, IOContext ctxt) throws IOExc { SmileParserBootstrapper bs = new SmileParserBootstrapper(ctxt, in); return bs.constructParser(_factoryFeatures, _parserFeatures, - _smileParserFeatures, _objectCodec, _byteSymbolCanonicalizer, - _smileBufferRecycler()); + _smileParserFeatures, _objectCodec, _byteSymbolCanonicalizer); } @Override @@ -475,8 +460,7 @@ protected SmileParser _createParser(byte[] data, int offset, int len, IOContext { return new SmileParserBootstrapper(ctxt, data, offset, len).constructParser( _factoryFeatures, _parserFeatures, _smileParserFeatures, - _objectCodec, _byteSymbolCanonicalizer, - _smileBufferRecycler()); + _objectCodec, _byteSymbolCanonicalizer); } @Override @@ -526,8 +510,7 @@ protected SmileGenerator _createGenerator(OutputStream out, IOContext ctxt) thro * But should we force writing, or throw exception, if settings are in conflict? * For now, let's error out... */ - SmileGenerator gen = new SmileGenerator(ctxt, _generatorFeatures, feats, _objectCodec, out, - _smileBufferRecycler()); + SmileGenerator gen = new SmileGenerator(ctxt, _generatorFeatures, feats, _objectCodec, out); if ((feats & SmileGenerator.Feature.WRITE_HEADER.getMask()) != 0) { gen.writeHeader(); } else { @@ -546,16 +529,4 @@ protected SmileGenerator _createGenerator(OutputStream out, IOContext ctxt) thro } return gen; } - - protected final static SmileBufferRecycler _smileBufferRecycler() - { - SoftReference ref = _smileRecyclerRef.get(); - SmileBufferRecycler br = (ref == null) ? null : ref.get(); - - if (br == null) { - br = new SmileBufferRecycler(); - _smileRecyclerRef.set(new SoftReference(br)); - } - return br; - } } diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileGenerator.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileGenerator.java index 10b2452a0..a3398c51b 100644 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileGenerator.java +++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileGenerator.java @@ -20,6 +20,12 @@ public class SmileGenerator extends GeneratorBase { + // @since 2.16 + protected final static int DEFAULT_NAME_BUFFER_LENGTH = 64; + + // @since 2.16 + protected final static int DEFAULT_STRING_VALUE_BUFFER_LENGTH = 64; + /** * Enumeration that defines all togglable features for Smile generators. */ @@ -196,12 +202,6 @@ public SharedStringNode(String value, int index, SharedStringNode next) */ protected int _formatFeatures; - /** - * Helper object used for low-level recycling of Smile-generator - * specific buffers. - */ - protected final SmileBufferRecycler _smileBufferRecycler; - /* /********************************************************************** /* Output state @@ -288,8 +288,7 @@ public SharedStringNode(String value, int index, SharedStringNode next) * @since 2.16 */ public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, - ObjectCodec codec, OutputStream out, - SmileBufferRecycler sbr) + ObjectCodec codec, OutputStream out) { super(stdFeatures, codec, ioCtxt, /*WriteContext*/ null); DupDetector dups = JsonGenerator.Feature.STRICT_DUPLICATE_DETECTION.enabledIn(stdFeatures) @@ -299,7 +298,6 @@ public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, _streamWriteContext = SmileWriteContext.createRootContext(dups); _formatFeatures = smileFeatures; _streamWriteConstraints = ioCtxt.streamWriteConstraints(); - _smileBufferRecycler = sbr; _out = out; _bufferRecyclable = true; _outputBuffer = ioCtxt.allocWriteEncodingBuffer(); @@ -314,10 +312,7 @@ public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, _seenNames = null; _seenNameCount = -1; } else { - _seenNames = _smileBufferRecycler.allocSeenNamesWriteBuffer(); - if (_seenNames == null) { - _seenNames = new SharedStringNode[SmileBufferRecycler.DEFAULT_NAME_BUFFER_LENGTH]; - } + _seenNames = new SharedStringNode[DEFAULT_NAME_BUFFER_LENGTH]; _seenNameCount = 0; } @@ -325,10 +320,7 @@ public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, _seenStringValues = null; _seenStringValueCount = -1; } else { - _seenStringValues = _smileBufferRecycler.allocSeenStringValuesWriteBuffer(); - if (_seenStringValues == null) { - _seenStringValues = new SharedStringNode[SmileBufferRecycler.DEFAULT_STRING_VALUE_BUFFER_LENGTH]; - } + _seenStringValues = new SharedStringNode[DEFAULT_STRING_VALUE_BUFFER_LENGTH]; _seenStringValueCount = 0; } } @@ -338,7 +330,6 @@ public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, */ public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, ObjectCodec codec, OutputStream out, - SmileBufferRecycler sbr, byte[] outputBuffer, int offset, boolean bufferRecyclable) { super(stdFeatures, codec, ioCtxt, null); @@ -349,7 +340,6 @@ public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, _streamWriteContext = SmileWriteContext.createRootContext(dups); _formatFeatures = smileFeatures; _streamWriteConstraints = ioCtxt.streamWriteConstraints(); - _smileBufferRecycler = sbr; _out = out; _bufferRecyclable = bufferRecyclable; _outputTail = offset; @@ -365,10 +355,7 @@ public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, _seenNames = null; _seenNameCount = -1; } else { - _seenNames = _smileBufferRecycler.allocSeenNamesWriteBuffer(); - if (_seenNames == null) { - _seenNames = new SharedStringNode[SmileBufferRecycler.DEFAULT_NAME_BUFFER_LENGTH]; - } + _seenNames = new SharedStringNode[DEFAULT_NAME_BUFFER_LENGTH]; _seenNameCount = 0; } @@ -376,37 +363,11 @@ public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, _seenStringValues = null; _seenStringValueCount = -1; } else { - _seenStringValues = _smileBufferRecycler.allocSeenStringValuesWriteBuffer(); - if (_seenStringValues == null) { - _seenStringValues = new SharedStringNode[SmileBufferRecycler.DEFAULT_STRING_VALUE_BUFFER_LENGTH]; - } + _seenStringValues = new SharedStringNode[DEFAULT_STRING_VALUE_BUFFER_LENGTH]; _seenStringValueCount = 0; } } - /** - * @deprecated Since 2.16 - */ - @Deprecated // @since 2.16 - public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, - ObjectCodec codec, OutputStream out) - { - this(ioCtxt, stdFeatures, smileFeatures, codec, out, new SmileBufferRecycler()); - } - - /** - * @deprecated Since 2.16 - */ - @Deprecated // @since 2.16 - public SmileGenerator(IOContext ioCtxt, int stdFeatures, int smileFeatures, - ObjectCodec codec, OutputStream out, - byte[] outputBuffer, int offset, boolean bufferRecyclable) - { - this(ioCtxt, stdFeatures, smileFeatures, - codec, out, new SmileBufferRecycler(), - outputBuffer, offset, bufferRecyclable); - } - /** * Method that can be called to explicitly write Smile document header. * Note that usually you do not need to call this for first document to output, @@ -2629,35 +2590,6 @@ protected void _releaseBuffers() _outputBuffer = null; _ioContext.releaseWriteEncodingBuffer(buf); } - /* Ok: since clearing up of larger arrays is much slower, - * let's only recycle default-sized buffers... - */ - { - SharedStringNode[] nameBuf = _seenNames; - if (nameBuf != null && nameBuf.length == SmileBufferRecycler.DEFAULT_NAME_BUFFER_LENGTH) { - _seenNames = null; - /* 28-Jun-2011, tatu: With 1.9, caller needs to clear the buffer; and note - * that since it's a hash area, must clear all - */ - if (_seenNameCount > 0) { - Arrays.fill(nameBuf, null); - } - _smileBufferRecycler.releaseSeenNamesWriteBuffer(nameBuf); - } - } - { - SharedStringNode[] valueBuf = _seenStringValues; - if (valueBuf != null && valueBuf.length == SmileBufferRecycler.DEFAULT_STRING_VALUE_BUFFER_LENGTH) { - _seenStringValues = null; - /* 28-Jun-2011, tatu: With 1.9, caller needs to clear the buffer; and note - * that since it's a hash area, must clear all - */ - if (_seenStringValueCount > 0) { - Arrays.fill(valueBuf, null); - } - _smileBufferRecycler.releaseSeenStringValuesWriteBuffer(valueBuf); - } - } } protected final void _flushBuffer() throws IOException diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java index 5887ecfe0..d85ab72b3 100644 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java +++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java @@ -141,16 +141,12 @@ private Feature(boolean defaultState) { /********************************************************** */ - /** - * @since 2.16 - */ public SmileParser(IOContext ctxt, int parserFeatures, int smileFeatures, ObjectCodec codec, ByteQuadsCanonicalizer sym, - SmileBufferRecycler sbr, InputStream in, byte[] inputBuffer, int start, int end, boolean bufferRecyclable) { - super(ctxt, parserFeatures, smileFeatures, sym, sbr); + super(ctxt, parserFeatures, smileFeatures, sym); _objectCodec = codec; _inputStream = in; @@ -160,20 +156,6 @@ public SmileParser(IOContext ctxt, int parserFeatures, int smileFeatures, _bufferRecyclable = bufferRecyclable; } - /** - * @deprecated Since 2.16 - */ - @Deprecated // @since 2.16 - public SmileParser(IOContext ctxt, int parserFeatures, int smileFeatures, - ObjectCodec codec, ByteQuadsCanonicalizer sym, - InputStream in, byte[] inputBuffer, int start, int end, - boolean bufferRecyclable) - { - this(ctxt, parserFeatures, smileFeatures, - codec, sym, new SmileBufferRecycler(), - in, inputBuffer, start, end, bufferRecyclable); - } - @Override public ObjectCodec getCodec() { return _objectCodec; @@ -628,15 +610,12 @@ private final void _expandSeenStringValues(String newText) int len = oldShared.length; String[] newShared; if (len == 0) { - newShared = _smileBufferRecycler.allocSeenStringValuesReadBuffer(); - if (newShared == null) { - newShared = new String[SmileBufferRecycler.DEFAULT_STRING_VALUE_BUFFER_LENGTH]; - } + newShared = new String[DEFAULT_STRING_VALUE_BUFFER_LENGTH]; } else if (len == SmileConstants.MAX_SHARED_STRING_VALUES) { // too many? Just flush... newShared = oldShared; _seenStringValueCount = 0; // could also clear, but let's not yet bother } else { - int newSize = (len == SmileBufferRecycler.DEFAULT_NAME_BUFFER_LENGTH) ? 256 : SmileConstants.MAX_SHARED_STRING_VALUES; + int newSize = (len == DEFAULT_NAME_BUFFER_LENGTH) ? 256 : SmileConstants.MAX_SHARED_STRING_VALUES; newShared = Arrays.copyOf(oldShared, newSize); } _seenStringValues = newShared; @@ -1543,15 +1522,12 @@ private final String[] _expandSeenNames(String[] oldShared) int len = oldShared.length; String[] newShared; if (len == 0) { - newShared = _smileBufferRecycler.allocSeenNamesReadBuffer(); - if (newShared == null) { - newShared = new String[SmileBufferRecycler.DEFAULT_NAME_BUFFER_LENGTH]; - } + newShared = new String[DEFAULT_NAME_BUFFER_LENGTH]; } else if (len == SmileConstants.MAX_SHARED_NAMES) { // too many? Just flush... newShared = oldShared; _seenNameCount = 0; // could also clear, but let's not yet bother } else { - int newSize = (len == SmileBufferRecycler.DEFAULT_STRING_VALUE_BUFFER_LENGTH) ? 256 : SmileConstants.MAX_SHARED_NAMES; + int newSize = (len == DEFAULT_STRING_VALUE_BUFFER_LENGTH) ? 256 : SmileConstants.MAX_SHARED_NAMES; newShared = Arrays.copyOf(oldShared, newSize); } return newShared; diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBase.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBase.java index 8ae0284bb..b1f7a07b4 100644 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBase.java +++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBase.java @@ -3,7 +3,6 @@ import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; -import java.util.Arrays; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.core.base.ParserMinimalBase; @@ -27,6 +26,12 @@ public abstract class SmileParserBase extends ParserMinimalBase // read only up to 250k protected final static int LONGEST_NON_CHUNKED_BINARY = 250_000; + // @since 2.16 + protected final static int DEFAULT_NAME_BUFFER_LENGTH = 64; + + // @since 2.16 + protected final static int DEFAULT_STRING_VALUE_BUFFER_LENGTH = 64; + // @since 2.14 protected final static JacksonFeatureSet SMILE_READ_CAPABILITIES = DEFAULT_READ_CAPABILITIES.with(StreamReadCapability.EXACT_FLOATS); @@ -236,29 +241,14 @@ public abstract class SmileParserBase extends ParserMinimalBase protected int _seenStringValueCount = -1; - /* - /********************************************************************** - /* Buffer recycling - /********************************************************************** - */ - - /** - * Helper object used for low-level recycling of Smile-generator - * specific buffers. - */ - protected final SmileBufferRecycler _smileBufferRecycler; - /* /********************************************************************** /* Life-cycle /********************************************************************** */ - /** - * @since 2.16 - */ protected SmileParserBase(IOContext ctxt, int parserFeatures, int formatFeatures, - ByteQuadsCanonicalizer sym, SmileBufferRecycler sbr) + ByteQuadsCanonicalizer sym) { super(parserFeatures); _formatFeatures = formatFeatures; @@ -268,9 +258,7 @@ protected SmileParserBase(IOContext ctxt, int parserFeatures, int formatFeatures DupDetector dups = Feature.STRICT_DUPLICATE_DETECTION.enabledIn(parserFeatures) ? DupDetector.rootDetector(this) : null; _streamReadContext = JsonReadContext.createRootContext(dups); - _textBuffer = ctxt.constructReadConstrainedTextBuffer(); - _smileBufferRecycler = sbr; } @Override @@ -420,26 +408,6 @@ protected final void _releaseBuffers() throws IOException { _nameCopyBuffer = null; _ioContext.releaseNameCopyBuffer(buf); } - String[] nameBuf = _seenNames; - if (nameBuf != null && nameBuf.length > 0) { - _seenNames = null; - // 28-Jun-2011, tatu: With 1.9, caller needs to clear the buffer; - // but we only need to clear up to count as it is not a hash area - if (_seenNameCount > 0) { - Arrays.fill(nameBuf, 0, _seenNameCount, null); - } - _smileBufferRecycler.releaseSeenNamesReadBuffer(nameBuf); - } - String[] valueBuf = _seenStringValues; - if (valueBuf != null && valueBuf.length > 0) { - _seenStringValues = null; - // 28-Jun-2011, tatu: With 1.9, caller needs to clear the buffer; - // but we only need to clear up to count as it is not a hash area - if (_seenStringValueCount > 0) { - Arrays.fill(valueBuf, 0, _seenStringValueCount, null); - } - _smileBufferRecycler.releaseSeenStringValuesReadBuffer(valueBuf); - } _releaseBuffers2(); } diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBootstrapper.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBootstrapper.java index 53ba1c700..51605171a 100644 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBootstrapper.java +++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBootstrapper.java @@ -88,8 +88,7 @@ public SmileParserBootstrapper(IOContext ctxt, byte[] inputBuffer, int inputStar public SmileParser constructParser(int factoryFeatures, int generalParserFeatures, int smileFeatures, - ObjectCodec codec, ByteQuadsCanonicalizer rootByteSymbols, - SmileBufferRecycler sbr) + ObjectCodec codec, ByteQuadsCanonicalizer rootByteSymbols) throws IOException, JsonParseException { // 13-Mar-2021, tatu: [dataformats-binary#252] Create canonicalizing OR @@ -105,7 +104,7 @@ public SmileParser constructParser(int factoryFeatures, } SmileParser p = new SmileParser(_context, generalParserFeatures, smileFeatures, - codec, can, sbr, + codec, can, _in, _inputBuffer, _inputPtr, _inputEnd, _bufferRecyclable); boolean hadSig = false; diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingByteArrayParser.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingByteArrayParser.java index a01bc565f..5b148de4f 100644 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingByteArrayParser.java +++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingByteArrayParser.java @@ -12,7 +12,7 @@ import com.fasterxml.jackson.core.io.IOContext; import com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer; import com.fasterxml.jackson.core.util.VersionUtil; -import com.fasterxml.jackson.dataformat.smile.SmileBufferRecycler; + import com.fasterxml.jackson.dataformat.smile.SmileConstants; import com.fasterxml.jackson.dataformat.smile.SmileParser; import com.fasterxml.jackson.dataformat.smile.SmileUtil; @@ -52,20 +52,10 @@ public class NonBlockingByteArrayParser /********************************************************************** */ - public NonBlockingByteArrayParser(IOContext ctxt, int parserFeatures, int smileFeatures, - ByteQuadsCanonicalizer sym, SmileBufferRecycler sbr) - { - super(ctxt, parserFeatures, smileFeatures, sym, sbr); - } - - /** - * @deprecated Since 2.16 - */ - @Deprecated public NonBlockingByteArrayParser(IOContext ctxt, int parserFeatures, int smileFeatures, ByteQuadsCanonicalizer sym) { - this(ctxt, parserFeatures, smileFeatures, sym, new SmileBufferRecycler()); + super(ctxt, parserFeatures, smileFeatures, sym); } /* diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java index d1e34b2f8..8753d5ce4 100644 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java +++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java @@ -142,9 +142,9 @@ public abstract class NonBlockingParserBase * @since 2.16 */ protected NonBlockingParserBase(IOContext ctxt, int parserFeatures, int smileFeatures, - ByteQuadsCanonicalizer sym, SmileBufferRecycler sbr) + ByteQuadsCanonicalizer sym) { - super(ctxt, parserFeatures, smileFeatures, sym, sbr); + super(ctxt, parserFeatures, smileFeatures, sym); // We don't need a lot; for most things maximum known a-priori length below 70 bytes _inputCopy = ctxt.allocReadIOBuffer(500); @@ -558,15 +558,12 @@ protected final String[] _expandSeenNames(String[] oldShared) int len = oldShared.length; String[] newShared; if (len == 0) { - newShared = _smileBufferRecycler.allocSeenNamesReadBuffer(); - if (newShared == null) { - newShared = new String[SmileBufferRecycler.DEFAULT_NAME_BUFFER_LENGTH]; - } + newShared = new String[DEFAULT_NAME_BUFFER_LENGTH]; } else if (len == SmileConstants.MAX_SHARED_NAMES) { // too many? Just flush... newShared = oldShared; _seenNameCount = 0; // could also clear, but let's not yet bother } else { - int newSize = (len == SmileBufferRecycler.DEFAULT_STRING_VALUE_BUFFER_LENGTH) ? 256 : SmileConstants.MAX_SHARED_NAMES; + int newSize = (len == DEFAULT_STRING_VALUE_BUFFER_LENGTH) ? 256 : SmileConstants.MAX_SHARED_NAMES; newShared = new String[newSize]; System.arraycopy(oldShared, 0, newShared, 0, oldShared.length); } @@ -633,15 +630,12 @@ private final void _expandSeenStringValues(String v) int len = oldShared.length; String[] newShared; if (len == 0) { - newShared = _smileBufferRecycler.allocSeenStringValuesReadBuffer(); - if (newShared == null) { - newShared = new String[SmileBufferRecycler.DEFAULT_STRING_VALUE_BUFFER_LENGTH]; - } + newShared = new String[DEFAULT_STRING_VALUE_BUFFER_LENGTH]; } else if (len == SmileConstants.MAX_SHARED_STRING_VALUES) { // too many? Just flush... newShared = oldShared; _seenStringValueCount = 0; // could also clear, but let's not yet bother } else { - int newSize = (len == SmileBufferRecycler.DEFAULT_NAME_BUFFER_LENGTH) ? 256 : SmileConstants.MAX_SHARED_STRING_VALUES; + int newSize = (len == DEFAULT_NAME_BUFFER_LENGTH) ? 256 : SmileConstants.MAX_SHARED_STRING_VALUES; newShared = new String[newSize]; System.arraycopy(oldShared, 0, newShared, 0, oldShared.length); }