Skip to content

Commit f4e22ed

Browse files
committed
Minor prep work for #400
1 parent 200ee04 commit f4e22ed

File tree

1 file changed

+8
-11
lines changed

1 file changed

+8
-11
lines changed

avro/src/main/java/com/fasterxml/jackson/dataformat/avro/apacheimpl/ApacheCodecRecycler.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.InputStream;
44
import java.io.OutputStream;
55
import java.lang.ref.SoftReference;
6+
import java.util.concurrent.atomic.AtomicReference;
67

78
import org.apache.avro.io.*;
89

@@ -23,8 +24,8 @@ public final class ApacheCodecRecycler
2324
protected final static ThreadLocal<SoftReference<ApacheCodecRecycler>> _recycler
2425
= new ThreadLocal<SoftReference<ApacheCodecRecycler>>();
2526

26-
private BinaryDecoder decoder;
27-
private BinaryEncoder encoder;
27+
private final AtomicReference<BinaryDecoder> decoderRef = new AtomicReference<>();
28+
private final AtomicReference<BinaryEncoder> encoderRef = new AtomicReference<>();
2829

2930
private ApacheCodecRecycler() { }
3031

@@ -57,11 +58,11 @@ public static BinaryEncoder encoder(OutputStream out, boolean buffering)
5758
}
5859

5960
public static void release(BinaryDecoder dec) {
60-
_recycler().decoder = (BinaryDecoder) dec;
61+
_recycler().decoderRef.set(dec);
6162
}
6263

6364
public static void release(BinaryEncoder enc) {
64-
_recycler().encoder = enc;
65+
_recycler().encoderRef.set(enc);
6566
}
6667

6768
/*
@@ -76,21 +77,17 @@ private static ApacheCodecRecycler _recycler() {
7677

7778
if (r == null) {
7879
r = new ApacheCodecRecycler();
79-
_recycler.set(new SoftReference<ApacheCodecRecycler>(r));
80+
_recycler.set(new SoftReference<>(r));
8081
}
8182
return r;
8283
}
8384

8485
private BinaryDecoder claimDecoder() {
85-
BinaryDecoder d = decoder;
86-
decoder = null;
87-
return d;
86+
return decoderRef.getAndSet(null);
8887
}
8988

9089
private BinaryEncoder claimEncoder() {
91-
BinaryEncoder e = encoder;
92-
encoder = null;
93-
return e;
90+
return encoderRef.getAndSet(null);
9491
}
9592

9693
/*

0 commit comments

Comments
 (0)