diff --git a/lib_eio/buf_write.ml b/lib_eio/buf_write.ml index e145a1e..5d26f3e 100644 --- a/lib_eio/buf_write.ml +++ b/lib_eio/buf_write.ml @@ -167,19 +167,6 @@ type t = } (* Invariant: [write_pos >= scheduled_pos] *) -let of_buffer buffer = - { buffer - ; write_pos = 0 - ; scheduled_pos = 0 - ; scheduled = Buffers.create 4 - ; flushed = Flushes.create 1 - ; bytes_received = 0 - ; bytes_written = 0 - ; state = Active - ; wake_writer = ignore - ; id = Ctf.mint_id () - } - exception Released let writable_exn t = @@ -381,11 +368,25 @@ let abort t = in aux () -let create ~sw size = - let t = of_buffer (Bigstringaf.create size) in +let of_buffer ~sw buffer = + let t = { buffer + ; write_pos = 0 + ; scheduled_pos = 0 + ; scheduled = Buffers.create 4 + ; flushed = Flushes.create 1 + ; bytes_received = 0 + ; bytes_written = 0 + ; state = Active + ; wake_writer = ignore + ; id = Ctf.mint_id () + } + in Switch.on_release sw (fun () -> abort t); t +let create ~sw size = + of_buffer ~sw (Bigstringaf.create size) + let pending_bytes t = (t.write_pos - t.scheduled_pos) + (t.bytes_received - t.bytes_written) diff --git a/lib_eio/buf_write.mli b/lib_eio/buf_write.mli index f10927a..66be8f3 100644 --- a/lib_eio/buf_write.mli +++ b/lib_eio/buf_write.mli @@ -268,8 +268,8 @@ val create : sw:Switch.t -> int -> t when [len] is not large enough to support a write. When [sw] is finished, any pending flush operations immediately fail. *) -val of_buffer : Cstruct.buffer -> t -(** [of_buffer buf] creates a serializer, using [buf] as its internal +val of_buffer : sw:Switch.t -> Cstruct.buffer -> t +(** [of_buffer ~sw buf] creates a serializer, using [buf] as its internal buffer. The serializer takes ownership of [buf] until the serializer has been closed and flushed of all output. *)