File tree Expand file tree Collapse file tree 2 files changed +32
-14
lines changed
Expand file tree Collapse file tree 2 files changed +32
-14
lines changed Original file line number Diff line number Diff line change @@ -41,6 +41,12 @@ module Response_state = struct
4141 | Streaming of Response .t * [`write ] Body .t
4242end
4343
44+ module Input_state = struct
45+ type t =
46+ | Ready
47+ | Complete
48+ end
49+
4450type error_handler =
4551 ?request:Request .t -> error -> (Headers .t -> [`write ] Body .t ) -> unit
4652
@@ -224,8 +230,11 @@ let on_more_output_available t f =
224230let persistent_connection t =
225231 t.persistent
226232
227- let requires_input { request_body; _ } =
228- not (Body. is_closed request_body)
233+ let input_state t : Input_state.t =
234+ if Body. is_closed t.request_body
235+ then Complete
236+ else Ready
237+ ;;
229238
230239let requires_output { response_state; _ } =
231240 match response_state with
@@ -236,7 +245,10 @@ let requires_output { response_state; _ } =
236245 | Waiting _ -> true
237246
238247let is_complete t =
239- not (requires_input t || requires_output t)
248+ match input_state t with
249+ | Complete -> not (requires_output t)
250+ | Ready -> false
251+ ;;
240252
241253let flush_request_body t =
242254 let request_body = request_body t in
Original file line number Diff line number Diff line change @@ -215,24 +215,30 @@ let advance_request_queue_if_necessary t =
215215 wakeup_writer t;
216216 if Reqd. is_complete reqd
217217 then shutdown t
218- else if not (Reqd. requires_input reqd)
219- then shutdown_reader t
218+ else
219+ match Reqd. input_state reqd with
220+ | Ready -> ()
221+ | Complete -> shutdown_reader t
220222 end
221223 end else if Reader. is_closed t.reader
222224 then shutdown t
223225
224226let _next_read_operation t =
225227 advance_request_queue_if_necessary t;
226- if is_active t then begin
228+ if is_active t
229+ then (
227230 let reqd = current_reqd_exn t in
228- if Reqd. requires_input reqd then Reader. next t.reader
229- else if Reqd. persistent_connection reqd then `Yield
230- else begin
231- shutdown_reader t;
232- Reader. next t.reader
233- end
234- end else
235- Reader. next t.reader
231+ match Reqd. input_state reqd with
232+ | Ready -> Reader. next t.reader
233+ | Complete ->
234+ if Reqd. persistent_connection reqd
235+ then `Yield
236+ else (
237+ shutdown_reader t;
238+ Reader. next t.reader)
239+ )
240+ else Reader. next t.reader
241+ ;;
236242
237243let next_read_operation t =
238244 match _next_read_operation t with
You can’t perform that action at this time.
0 commit comments