Actually implement ChunkHolder/ChunkSet pools (#1840)

This commit is contained in:
Jordan 2022-06-24 10:13:58 +01:00 committed by GitHub
parent 800988aae7
commit 8094b68967
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -67,7 +67,13 @@ public class ChunkHolder<T extends Future<T>> implements IQueueChunk<T> {
@Override @Override
public synchronized void recycle() { public synchronized void recycle() {
delegate = NULL; delegate = NULL;
chunkSet = null; if (chunkSet != null) {
chunkSet.recycle();
chunkSet = null;
}
chunkExisting = null;
extent = null;
POOL.offer(this);
} }
public synchronized IBlockDelegate getDelegate() { public synchronized IBlockDelegate getDelegate() {
@ -1039,7 +1045,9 @@ public class ChunkHolder<T extends Future<T>> implements IQueueChunk<T> {
chunkSet.setBitMask(bitMask); chunkSet.setBitMask(bitMask);
try { try {
return this.call(chunkSet, () -> { return this.call(chunkSet, () -> {
recycle(); this.delegate = NULL;
chunkSet.recycle();
chunkSet = null;
calledLock.unlock(stamp); calledLock.unlock(stamp);
}); });
} catch (Throwable t) { } catch (Throwable t) {