diff options
author | Erlang/OTP <otp@erlang.org> | 2023-03-17 13:58:51 +0100 |
---|---|---|
committer | Erlang/OTP <otp@erlang.org> | 2023-03-17 13:58:51 +0100 |
commit | 77ec626ede396cef0e2739a4379365851f0c821f (patch) | |
tree | 78b5d9a61bbec327bd9a726140329f2200394b7d | |
parent | da8b6f1c9a9a31502f25137b77f51fb6862bc11f (diff) | |
parent | 952e9109c3ced3972c6d37b9ffd49416de2e8e71 (diff) | |
download | erlang-77ec626ede396cef0e2739a4379365851f0c821f.tar.gz |
Merge branch 'ingela/inets/httpc/maint-24/queue-bug/OTP-18509' into maint-24
* ingela/inets/httpc/maint-24/queue-bug/OTP-18509:
inets: httpc - fix pipeline and keepalive queue bug
-rw-r--r-- | lib/inets/src/http_client/httpc_handler.erl | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/inets/src/http_client/httpc_handler.erl b/lib/inets/src/http_client/httpc_handler.erl index 615314ac1d..17d9b60757 100644 --- a/lib/inets/src/http_client/httpc_handler.erl +++ b/lib/inets/src/http_client/httpc_handler.erl @@ -322,7 +322,7 @@ terminate(normal, cancel_timers(Timers), %% Maybe deliver answers to requests - deliver_answer(Request), + maybe_deliver_answer(Request, State), %% And, just in case, close our side (**really** overkill) http_transport:close(SocketType, Socket); @@ -713,24 +713,26 @@ call(Msg, Pid) -> cast(Msg, Pid) -> gen_server:cast(Pid, Msg). -maybe_retry_queue(Q, State) -> - case queue:is_empty(Q) of - false -> +maybe_retry_queue(Q, #state{status = new} = State) -> + retry_pipeline(queue:to_list(Q), State); +maybe_retry_queue(Q, #state{request = Request} = State) -> + case Request of + undefined -> retry_pipeline(queue:to_list(Q), State); - true -> - ok + _ -> + retry_pipeline(queue:to_list(queue:cons(Request, Q)), State) end. - + maybe_send_answer(#request{from = answer_sent}, _Reason, State) -> State; maybe_send_answer(Request, Answer, State) -> answer_request(Request, Answer, State). -deliver_answer(#request{from = From} = Request) +maybe_deliver_answer(#request{from = From} = Request, #state{status = new}) when From =/= answer_sent -> Response = httpc_response:error(Request, socket_closed_remotely), httpc_response:send(From, Response); -deliver_answer(_Request) -> +maybe_deliver_answer(_,_) -> ok. %%%-------------------------------------------------------------------- |