diff --git a/src/main/java/org/nustaq/serialization/FSTClazzInfo.java b/src/main/java/org/nustaq/serialization/FSTClazzInfo.java index 69db1b94..dd1e0723 100644 --- a/src/main/java/org/nustaq/serialization/FSTClazzInfo.java +++ b/src/main/java/org/nustaq/serialization/FSTClazzInfo.java @@ -105,7 +105,7 @@ public void setDecoderAttached(Object decoderAttached) { boolean isAsciiNameShortString = false; boolean requiresInit = false; boolean hasTransient; - FSTObjectSerializer ser; + volatile FSTObjectSerializer ser; FSTFieldInfo fieldInfo[]; // serializable fields Class clazz; @@ -975,19 +975,21 @@ public String getName() { * @return */ public FSTObjectSerializer getSer() { - if (ser == null) { + FSTObjectSerializer serializer = ser; + if (serializer == null) { if (clazz == null) { return null; } - ser = getSerNoStore(); - if (ser == null) { + serializer = getSerNoStore(); + if (serializer == null) { ser = FSTSerializerRegistry.NULL; + return null; } - } - if (ser == FSTSerializerRegistry.NULL) { + ser = serializer; + } else if (serializer == FSTSerializerRegistry.NULL) { return null; } - return ser; + return serializer; } // no sideffecting lookup diff --git a/src/main/java/org/nustaq/serialization/FSTObjectInput.java b/src/main/java/org/nustaq/serialization/FSTObjectInput.java index d950e087..8b731ef3 100644 --- a/src/main/java/org/nustaq/serialization/FSTObjectInput.java +++ b/src/main/java/org/nustaq/serialization/FSTObjectInput.java @@ -997,6 +997,7 @@ public void close() throws IOException { closed = true; resetAndClearRefs(); conf.returnObject(objects); + objects = null; getCodec().close(); } diff --git a/src/main/java/org/nustaq/serialization/FSTObjectOutput.java b/src/main/java/org/nustaq/serialization/FSTObjectOutput.java index 66bfa806..b8095678 100644 --- a/src/main/java/org/nustaq/serialization/FSTObjectOutput.java +++ b/src/main/java/org/nustaq/serialization/FSTObjectOutput.java @@ -164,9 +164,10 @@ public void flush() throws IOException { public void close() throws IOException { flush(); closed = true; - getCodec().close(); resetAndClearRefs(); + getCodec().close(); conf.returnObject(objects); + objects = null; } diff --git a/src/main/java/org/nustaq/serialization/FSTSerializerRegistry.java b/src/main/java/org/nustaq/serialization/FSTSerializerRegistry.java index ee8ddc7c..14434119 100644 --- a/src/main/java/org/nustaq/serialization/FSTSerializerRegistry.java +++ b/src/main/java/org/nustaq/serialization/FSTSerializerRegistry.java @@ -31,7 +31,7 @@ public class FSTSerializerRegistry { private FSTSerializerRegistryDelegate delegate; - public static FSTObjectSerializer NULL = new NULLSerializer(); + public static final FSTObjectSerializer NULL = new NULLSerializer(); public void setDelegate(FSTSerializerRegistryDelegate delegate) { this.delegate = delegate; diff --git a/src/main/java/org/nustaq/serialization/coders/FSTBytezDecoder.java b/src/main/java/org/nustaq/serialization/coders/FSTBytezDecoder.java index fae1c484..c4641f95 100644 --- a/src/main/java/org/nustaq/serialization/coders/FSTBytezDecoder.java +++ b/src/main/java/org/nustaq/serialization/coders/FSTBytezDecoder.java @@ -387,6 +387,7 @@ public void registerClass(Class possible) { @Override public void close() { conf.returnObject(clnames); + clnames = null; } @Override diff --git a/src/main/java/org/nustaq/serialization/coders/FSTBytezEncoder.java b/src/main/java/org/nustaq/serialization/coders/FSTBytezEncoder.java index a0e5064d..9629ebb9 100644 --- a/src/main/java/org/nustaq/serialization/coders/FSTBytezEncoder.java +++ b/src/main/java/org/nustaq/serialization/coders/FSTBytezEncoder.java @@ -234,6 +234,7 @@ public int getWritten() { @Override public void close() throws IOException { conf.returnObject(clnames); + clnames = null; } @Override diff --git a/src/main/java/org/nustaq/serialization/coders/FSTStreamDecoder.java b/src/main/java/org/nustaq/serialization/coders/FSTStreamDecoder.java index 2b204024..d0b17b5c 100644 --- a/src/main/java/org/nustaq/serialization/coders/FSTStreamDecoder.java +++ b/src/main/java/org/nustaq/serialization/coders/FSTStreamDecoder.java @@ -493,6 +493,7 @@ public void registerClass(Class possible) { @Override public void close() { conf.returnObject(clnames); + clnames = null; } @Override diff --git a/src/main/java/org/nustaq/serialization/coders/FSTStreamEncoder.java b/src/main/java/org/nustaq/serialization/coders/FSTStreamEncoder.java index 3848c310..8b4dbdc7 100644 --- a/src/main/java/org/nustaq/serialization/coders/FSTStreamEncoder.java +++ b/src/main/java/org/nustaq/serialization/coders/FSTStreamEncoder.java @@ -475,7 +475,9 @@ public int getWritten() { @Override public void close() throws IOException { buffout.close(); + clnames.clear(); conf.returnObject(clnames); + clnames = null; } @Override