Skip to content

Commit 6e59271

Browse files
authored
Part 3 of changes for #393 (#396)
1 parent b84a077 commit 6e59271

File tree

7 files changed

+55
-39
lines changed

7 files changed

+55
-39
lines changed

protobuf/src/test/java/com/fasterxml/jackson/dataformat/protobuf/ReadSimpleTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
import com.fasterxml.jackson.core.JsonParser;
77
import com.fasterxml.jackson.core.JsonToken;
8+
89
import com.fasterxml.jackson.core.StreamReadConstraints;
910
import com.fasterxml.jackson.databind.DatabindException;
10-
import com.fasterxml.jackson.databind.JsonMappingException;
1111
import com.fasterxml.jackson.databind.ObjectMapper;
1212
import com.fasterxml.jackson.databind.ObjectWriter;
1313
import com.fasterxml.jackson.dataformat.protobuf.schema.ProtobufSchema;

smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,8 @@ public NonBlockingByteArrayParser createNonBlockingByteArrayParser() throws IOEx
429429
// 13-Mar-2021, tatu: [dataformats-binary#252] Leave async parser with
430430
// always-canonicalizing, for now (2.13) -- to be improved in future
431431
ByteQuadsCanonicalizer can = _byteSymbolCanonicalizer.makeChildOrPlaceholder(_factoryFeatures);
432-
return new NonBlockingByteArrayParser(ctxt, _parserFeatures, _smileParserFeatures, can);
432+
return new NonBlockingByteArrayParser(ctxt, _parserFeatures, _smileParserFeatures, can,
433+
_smileBufferRecycler());
433434
}
434435

435436
/*
@@ -446,7 +447,8 @@ protected SmileParser _createParser(InputStream in, IOContext ctxt) throws IOExc
446447
{
447448
SmileParserBootstrapper bs = new SmileParserBootstrapper(ctxt, in);
448449
return bs.constructParser(_factoryFeatures, _parserFeatures,
449-
_smileParserFeatures, _objectCodec, _byteSymbolCanonicalizer);
450+
_smileParserFeatures, _objectCodec, _byteSymbolCanonicalizer,
451+
_smileBufferRecycler());
450452
}
451453

452454
@Override
@@ -473,7 +475,8 @@ protected SmileParser _createParser(byte[] data, int offset, int len, IOContext
473475
{
474476
return new SmileParserBootstrapper(ctxt, data, offset, len).constructParser(
475477
_factoryFeatures, _parserFeatures, _smileParserFeatures,
476-
_objectCodec, _byteSymbolCanonicalizer);
478+
_objectCodec, _byteSymbolCanonicalizer,
479+
_smileBufferRecycler());
477480
}
478481

479482
@Override

smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,16 @@ private Feature(boolean defaultState) {
141141
/**********************************************************
142142
*/
143143

144+
/**
145+
* @since 2.16
146+
*/
144147
public SmileParser(IOContext ctxt, int parserFeatures, int smileFeatures,
145-
ObjectCodec codec,
146-
ByteQuadsCanonicalizer sym,
148+
ObjectCodec codec, ByteQuadsCanonicalizer sym,
149+
SmileBufferRecycler sbr,
147150
InputStream in, byte[] inputBuffer, int start, int end,
148151
boolean bufferRecyclable)
149152
{
150-
super(ctxt, parserFeatures, smileFeatures, sym);
153+
super(ctxt, parserFeatures, smileFeatures, sym, sbr);
151154
_objectCodec = codec;
152155

153156
_inputStream = in;
@@ -157,6 +160,20 @@ public SmileParser(IOContext ctxt, int parserFeatures, int smileFeatures,
157160
_bufferRecyclable = bufferRecyclable;
158161
}
159162

163+
/**
164+
* @deprecated Since 2.16
165+
*/
166+
@Deprecated // @since 2.16
167+
public SmileParser(IOContext ctxt, int parserFeatures, int smileFeatures,
168+
ObjectCodec codec, ByteQuadsCanonicalizer sym,
169+
InputStream in, byte[] inputBuffer, int start, int end,
170+
boolean bufferRecyclable)
171+
{
172+
this(ctxt, parserFeatures, smileFeatures,
173+
codec, sym, new SmileBufferRecycler(),
174+
in, inputBuffer, start, end, bufferRecyclable);
175+
}
176+
160177
@Override
161178
public ObjectCodec getCodec() {
162179
return _objectCodec;

smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBase.java

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.fasterxml.jackson.dataformat.smile;
22

33
import java.io.IOException;
4-
import java.lang.ref.SoftReference;
54
import java.math.BigDecimal;
65
import java.math.BigInteger;
76
import java.util.Arrays;
@@ -239,18 +238,10 @@ public abstract class SmileParserBase extends ParserMinimalBase
239238

240239
/*
241240
/**********************************************************************
242-
/* Thread-local recycling
241+
/* Buffer recycling
243242
/**********************************************************************
244243
*/
245244

246-
/**
247-
* <code>ThreadLocal</code> contains a {@link java.lang.ref.SoftReference}
248-
* to a buffer recycler used to provide a low-cost
249-
* buffer recycling for Smile-specific buffers.
250-
*/
251-
protected final static ThreadLocal<SoftReference<SmileBufferRecycler>> _smileRecyclerRef
252-
= new ThreadLocal<SoftReference<SmileBufferRecycler>>();
253-
254245
/**
255246
* Helper object used for low-level recycling of Smile-generator
256247
* specific buffers.
@@ -263,8 +254,11 @@ public abstract class SmileParserBase extends ParserMinimalBase
263254
/**********************************************************************
264255
*/
265256

266-
public SmileParserBase(IOContext ctxt, int parserFeatures, int formatFeatures,
267-
ByteQuadsCanonicalizer sym)
257+
/**
258+
* @since 2.16
259+
*/
260+
protected SmileParserBase(IOContext ctxt, int parserFeatures, int formatFeatures,
261+
ByteQuadsCanonicalizer sym, SmileBufferRecycler sbr)
268262
{
269263
super(parserFeatures);
270264
_formatFeatures = formatFeatures;
@@ -276,26 +270,14 @@ public SmileParserBase(IOContext ctxt, int parserFeatures, int formatFeatures,
276270
_streamReadContext = JsonReadContext.createRootContext(dups);
277271

278272
_textBuffer = ctxt.constructReadConstrainedTextBuffer();
279-
_smileBufferRecycler = _smileBufferRecycler();
273+
_smileBufferRecycler = sbr;
280274
}
281275

282276
@Override
283277
public StreamReadConstraints streamReadConstraints() {
284278
return _ioContext.streamReadConstraints();
285279
}
286280

287-
protected final static SmileBufferRecycler _smileBufferRecycler()
288-
{
289-
SoftReference<SmileBufferRecycler> ref = _smileRecyclerRef.get();
290-
SmileBufferRecycler br = (ref == null) ? null : ref.get();
291-
292-
if (br == null) {
293-
br = new SmileBufferRecycler();
294-
_smileRecyclerRef.set(new SoftReference<SmileBufferRecycler>(br));
295-
}
296-
return br;
297-
}
298-
299281
/*
300282
/**********************************************************
301283
/* Versioned

smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParserBootstrapper.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ public SmileParserBootstrapper(IOContext ctxt, byte[] inputBuffer, int inputStar
8888

8989
public SmileParser constructParser(int factoryFeatures,
9090
int generalParserFeatures, int smileFeatures,
91-
ObjectCodec codec, ByteQuadsCanonicalizer rootByteSymbols)
91+
ObjectCodec codec, ByteQuadsCanonicalizer rootByteSymbols,
92+
SmileBufferRecycler sbr)
9293
throws IOException, JsonParseException
9394
{
9495
// 13-Mar-2021, tatu: [dataformats-binary#252] Create canonicalizing OR
@@ -104,7 +105,7 @@ public SmileParser constructParser(int factoryFeatures,
104105
}
105106

106107
SmileParser p = new SmileParser(_context, generalParserFeatures, smileFeatures,
107-
codec, can,
108+
codec, can, sbr,
108109
_in, _inputBuffer, _inputPtr, _inputEnd, _bufferRecyclable);
109110
boolean hadSig = false;
110111

smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingByteArrayParser.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import com.fasterxml.jackson.core.io.IOContext;
1313
import com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer;
1414
import com.fasterxml.jackson.core.util.VersionUtil;
15-
15+
import com.fasterxml.jackson.dataformat.smile.SmileBufferRecycler;
1616
import com.fasterxml.jackson.dataformat.smile.SmileConstants;
1717
import com.fasterxml.jackson.dataformat.smile.SmileParser;
1818
import com.fasterxml.jackson.dataformat.smile.SmileUtil;
@@ -52,10 +52,20 @@ public class NonBlockingByteArrayParser
5252
/**********************************************************************
5353
*/
5454

55+
public NonBlockingByteArrayParser(IOContext ctxt, int parserFeatures, int smileFeatures,
56+
ByteQuadsCanonicalizer sym, SmileBufferRecycler sbr)
57+
{
58+
super(ctxt, parserFeatures, smileFeatures, sym, sbr);
59+
}
60+
61+
/**
62+
* @deprecated Since 2.16
63+
*/
64+
@Deprecated
5565
public NonBlockingByteArrayParser(IOContext ctxt, int parserFeatures, int smileFeatures,
5666
ByteQuadsCanonicalizer sym)
5767
{
58-
super(ctxt, parserFeatures, smileFeatures, sym);
68+
this(ctxt, parserFeatures, smileFeatures, sym, new SmileBufferRecycler());
5969
}
6070

6171
/*

smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,13 @@ public abstract class NonBlockingParserBase
138138
/**********************************************************************
139139
*/
140140

141-
public NonBlockingParserBase(IOContext ctxt, int parserFeatures, int smileFeatures,
142-
ByteQuadsCanonicalizer sym)
141+
/**
142+
* @since 2.16
143+
*/
144+
protected NonBlockingParserBase(IOContext ctxt, int parserFeatures, int smileFeatures,
145+
ByteQuadsCanonicalizer sym, SmileBufferRecycler sbr)
143146
{
144-
super(ctxt, parserFeatures, smileFeatures, sym);
147+
super(ctxt, parserFeatures, smileFeatures, sym, sbr);
145148
// We don't need a lot; for most things maximum known a-priori length below 70 bytes
146149
_inputCopy = ctxt.allocReadIOBuffer(500);
147150

0 commit comments

Comments
 (0)