diff --git a/src/main/java/org/xerial/snappy/buffer/CachedBufferAllocator.java b/src/main/java/org/xerial/snappy/buffer/CachedBufferAllocator.java index 2ad9926..eacc50b 100644 --- a/src/main/java/org/xerial/snappy/buffer/CachedBufferAllocator.java +++ b/src/main/java/org/xerial/snappy/buffer/CachedBufferAllocator.java @@ -29,10 +29,16 @@ public class CachedBufferAllocator implements BufferAllocator { } public static synchronized CachedBufferAllocator getAllocator(int bufferSize) { - if(!queueTable.containsKey(bufferSize)) { - queueTable.put(bufferSize, new SoftReference(new CachedBufferAllocator(bufferSize))); + CachedBufferAllocator result = null; + + if (queueTable.containsKey(bufferSize)) { + result = queueTable.get(bufferSize).get(); } - return queueTable.get(bufferSize).get(); + if (result == null) { + result = new CachedBufferAllocator(bufferSize); + queueTable.put(bufferSize, new SoftReference(result)); + } + return result; } @Override