code: protected final ByteBuf copyAndCompose(ByteBufAllocator alloc, ByteBuf cumulation, ByteBuf next) {
          ByteBuf newCumulation = alloc.ioBuffer(cumulation.readableBytes() + next.readableBytes());
          try {
              newCumulation.writeBytes(cumulation).writeBytes(next);
          } catch (Throwable cause) {
              newCumulation.release();
              safeRelease(next);
              throwException(cause);
          }
          cumulation.release();
          next.release();
          return newCumulation;
      }
docs: Compose {@code cumulation} and {@code next} into a new {@link ByteBufAllocator#ioBuffer()}.
  @param alloc The allocator to use to allocate the new buffer.
  @param cumulation The current cumulation.
  @param next The next buffer.
  @return The result of {@code cumulation + next}.