@@ -206,9 +206,7 @@ let flush_buffer t =
206206 if len > 0 then begin
207207 let off = t.scheduled_pos in
208208 schedule_iovec t ~off ~len (`Bigstring t.buffer);
209- t.buffer < - Bigarray. (Array1. create char c_layout (Array1. dim t.buffer));
210- t.write_pos < - 0 ;
211- t.scheduled_pos < - 0
209+ t.scheduled_pos < - t.write_pos
212210 end
213211
214212let flush t f =
@@ -267,13 +265,13 @@ let schedule_bigstring =
267265 fun t ?off ?len a -> schedule_gen t ~length ~to_buffer ?off ?len a
268266
269267let ensure_space t len =
270- if free_bytes_in_buffer t < len then (
268+ if free_bytes_in_buffer t < len then begin
271269 flush_buffer t;
272- `Not_enough_space
273- )
274- else (
275- `Go_ahead
276- )
270+ t.buffer < -
271+ Bigarray. ( Array1. create char c_layout (max ( Array1. dim t.buffer) len));
272+ t.write_pos < - 0 ;
273+ t.scheduled_pos < - 0
274+ end
277275
278276let write_gen t ~length ~blit ?(off =0 ) ?len a =
279277 writable t;
@@ -282,14 +280,9 @@ let write_gen t ~length ~blit ?(off=0) ?len a =
282280 | None -> length a - off
283281 | Some len -> len
284282 in
285- match ensure_space t len with
286- | `Not_enough_space ->
287- let buffer = Bigarray. (Array1. create char c_layout len) in
288- blit a off buffer 0 len;
289- schedule_iovec t ~len (`Bigstring buffer)
290- | `Go_ahead ->
291- blit a off t.buffer t.write_pos len;
292- t.write_pos < - t.write_pos + len
283+ ensure_space t len;
284+ blit a off t.buffer t.write_pos len;
285+ t.write_pos < - t.write_pos + len
293286
294287let write_string =
295288 let length = String. length in
@@ -421,8 +414,10 @@ let rec shift_buffers t written =
421414 Buffers. enqueue_front (IOVec. shift iovec written) t.scheduled
422415 with Not_found ->
423416 assert (written = 0 );
424- t.scheduled_pos < - 0 ;
425- t.write_pos < - 0
417+ if t.scheduled_pos = t.write_pos then begin
418+ t.scheduled_pos < - 0 ;
419+ t.write_pos < - 0
420+ end
426421
427422let rec shift_flushes t =
428423 try
0 commit comments