diff --git a/src/main/java/it/cavallium/dbengine/database/LLUtils.java b/src/main/java/it/cavallium/dbengine/database/LLUtils.java index 5194c1e..83fe3f9 100644 --- a/src/main/java/it/cavallium/dbengine/database/LLUtils.java +++ b/src/main/java/it/cavallium/dbengine/database/LLUtils.java @@ -417,6 +417,24 @@ public class LLUtils { .doOnDiscard(Send.class, Send::close); } + /** + * cleanup resource + * @param cleanupOnSuccess if true the resource will be cleaned up if the function is successful + */ + public static > Flux usingSendResources(Mono> resourceSupplier, + Function> resourceClosure, + boolean cleanupOnSuccess) { + return Flux.usingWhen(resourceSupplier.map(Send::receive), resourceClosure, r -> { + if (cleanupOnSuccess) { + return Mono.fromRunnable(r::close); + } else { + return Mono.empty(); + } + }, (r, ex) -> Mono.fromRunnable(r::close), r -> Mono.fromRunnable(r::close)) + .doOnDiscard(Resource.class, Resource::close) + .doOnDiscard(Send.class, Send::close); + } + public static record DirectBuffer(@NotNull Send buffer, @NotNull ByteBuffer byteBuffer) {} @NotNull