File 1219-inets-httpc-fix-pipeline-and-keepalive-queue-bug.patch of Package erlang

From 7a1feefa4468ede9abdd3c64c63b3a8ce8585988 Mon Sep 17 00:00:00 2001
From: Ingela Anderton Andin <ingela@erlang.org>
Date: Mon, 13 Mar 2023 12:26:51 +0100
Subject: [PATCH] inets: httpc - fix pipeline and keepalive queue bug

This is a backport to OTP-25 track of the bugfix made as part of PR-6901
---
 lib/inets/src/http_client/httpc_handler.erl | 20 +++++++++++---------
 1 file 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 63e26f5266..b7b8dd7055 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);
@@ -706,24 +706,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.
 
 %%%--------------------------------------------------------------------
-- 
2.35.3

openSUSE Build Service is sponsored by