From d8e1634e9d50553b377d70c528ac6d099fbc741d Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Fri, 1 Oct 2021 19:17:46 +0200 Subject: [PATCH] Update netty --- .../java/org/warp/filesponge/DataBlock.java | 61 +++++++++++-------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/warp/filesponge/DataBlock.java b/src/main/java/org/warp/filesponge/DataBlock.java index 8b63bc4..a9ebfe8 100644 --- a/src/main/java/org/warp/filesponge/DataBlock.java +++ b/src/main/java/org/warp/filesponge/DataBlock.java @@ -23,17 +23,45 @@ import io.net5.buffer.api.Drop; import io.net5.buffer.api.Owned; import io.net5.buffer.api.Send; import io.net5.buffer.api.internal.ResourceSupport; +import it.cavallium.dbengine.database.LLSearchResultShard; import it.cavallium.dbengine.database.collections.DatabaseSingle; import java.util.Objects; +import org.warp.commonutils.log.Logger; +import org.warp.commonutils.log.LoggerFactory; public final class DataBlock extends ResourceSupport { + private static final Logger logger = LoggerFactory.getLogger(DataBlock.class); + + private static final Drop DROP = new Drop<>() { + @Override + public void drop(DataBlock obj) { + try { + if (obj.data != null) { + obj.data.close(); + } + } catch (Throwable ex) { + logger.error("Failed to close data", ex); + } + } + + @Override + public Drop fork() { + return this; + } + + @Override + public void attach(DataBlock obj) { + + } + }; + public static DataBlock of(int offset, int length, Send data) { - return new DataBlock(offset, length, data, d -> {}); + return new DataBlock(offset, length, data); } - private DataBlock(int offset, int length, Send data, Drop drop) { - super(new DataBlock.CloseOnDrop(drop)); + private DataBlock(int offset, int length, Send data) { + super(DROP); try (data) { this.offset = offset; this.length = length; @@ -111,27 +139,10 @@ public final class DataBlock extends ResourceSupport { protected Owned prepareSend() { Send dataSend; dataSend = this.data.send(); - return drop -> new DataBlock(offset, length, dataSend, drop); - } - - private static class CloseOnDrop implements Drop { - - private final Drop delegate; - - public CloseOnDrop(Drop drop) { - if (drop instanceof CloseOnDrop closeOnDrop) { - this.delegate = closeOnDrop.delegate; - } else { - this.delegate = drop; - } - } - - @Override - public void drop(DataBlock obj) { - if (obj.data.isAccessible()) { - obj.data.close(); - } - delegate.drop(obj); - } + return drop -> { + var instance = new DataBlock(offset, length, dataSend); + drop.attach(instance); + return instance; + }; } }