From be1ca997a75b14ab5893ec5d71a6fddc0b49e8bf Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Thu, 23 Sep 2021 23:45:41 +0200 Subject: [PATCH] Bugfix --- .../cavallium/dbengine/database/LLUtils.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/it/cavallium/dbengine/database/LLUtils.java b/src/main/java/it/cavallium/dbengine/database/LLUtils.java index 16f38cb..8140892 100644 --- a/src/main/java/it/cavallium/dbengine/database/LLUtils.java +++ b/src/main/java/it/cavallium/dbengine/database/LLUtils.java @@ -619,7 +619,17 @@ public class LLUtils { public static Buffer compositeBuffer(BufferAllocator alloc, @NotNull Send buffer1, @NotNull Send buffer2) { - return CompositeBuffer.compose(alloc, buffer1, buffer2); + var b1 = buffer1.receive(); + try (var b2 = buffer2.receive()) { + if (b1.writerOffset() < b1.capacity() || b2.writerOffset() < b2.capacity()) { + b1.ensureWritable(b2.readableBytes(), b2.readableBytes(), true); + b2.copyInto(b2.readerOffset(), b1, b1.writerOffset(), b2.readableBytes()); + b1.writerOffset(b1.writerOffset() + b2.readableBytes()); + return b1; + } else { + return CompositeBuffer.compose(alloc, b1.send(), b2.send()); + } + } } @NotNull @@ -627,7 +637,25 @@ public class LLUtils { @NotNull Send buffer1, @NotNull Send buffer2, @NotNull Send buffer3) { - return CompositeBuffer.compose(alloc, buffer1, buffer2, buffer3); + var b1 = buffer1.receive(); + try (var b2 = buffer2.receive()) { + try (var b3 = buffer3.receive()) { + if (b1.writerOffset() < b1.capacity() + || b2.writerOffset() < b2.capacity() + || b3.writerOffset() < b3.capacity()) { + b1.ensureWritable(b2.readableBytes(), b2.readableBytes(), true); + b2.copyInto(b2.readerOffset(), b1, b1.writerOffset(), b2.readableBytes()); + b1.writerOffset(b1.writerOffset() + b2.readableBytes()); + + b1.ensureWritable(b3.readableBytes(), b3.readableBytes(), true); + b3.copyInto(b3.readerOffset(), b1, b1.writerOffset(), b3.readableBytes()); + b1.writerOffset(b1.writerOffset() + b3.readableBytes()); + return b1; + } else { + return CompositeBuffer.compose(alloc, b1.send(), b2.send(), b3.send()); + } + } + } } public static Mono resolveDelta(Mono> prev, UpdateReturnMode updateReturnMode) {