Merge pull request #242 from talex5/buf_write_switch

Buf_write.of_buffer needs a switch too
This commit is contained in:
Thomas Leonard 2022-06-28 14:15:00 +01:00 committed by GitHub
commit a418022ab2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 17 deletions

View File

@ -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)

View File

@ -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. *)