mirror of
https://github.com/ocaml-multicore/eio.git
synced 2025-12-05 00:02:58 -05:00
Merge pull request #242 from talex5/buf_write_switch
Buf_write.of_buffer needs a switch too
This commit is contained in:
commit
a418022ab2
@ -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)
|
||||
|
||||
|
||||
@ -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. *)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user