File 1247-inets-httpc-fix-for-socket-closing.patch of Package erlang

From fadd337c262833387f285519b76d1b3ef3d4c0a7 Mon Sep 17 00:00:00 2001
From: Jakub Witczak <kuba@erlang.org>
Date: Wed, 5 Apr 2023 10:29:58 +0200
Subject: [PATCH] inets: httpc fix for socket closing

- upon remote socket closure, add current request to only 1 queue
---
 lib/inets/src/http_client/httpc_handler.erl | 26 ++++++++++++++-------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/lib/inets/src/http_client/httpc_handler.erl b/lib/inets/src/http_client/httpc_handler.erl
index 615314ac1d..acbb97ef73 100644
--- a/lib/inets/src/http_client/httpc_handler.erl
+++ b/lib/inets/src/http_client/httpc_handler.erl
@@ -305,8 +305,9 @@ terminate(normal,
 %% Socket closed remotely
 terminate(normal, 
           #state{session = #session{socket      = {remote_close, Socket},
-                                    socket_type = SocketType, 
-                                    id          = Id}, 
+                                    socket_type = SocketType,
+                                    type        = Type,
+                                    id          = Id},
                  profile_name = ProfileName,
                  request      = Request,
                  timers       = Timers,
@@ -315,8 +316,12 @@ terminate(normal,
     %% Clobber session
     (catch httpc_manager:delete_session(Id, ProfileName)),
 
-    maybe_retry_queue(Pipeline, State),
-    maybe_retry_queue(KeepAlive, State),
+    case Type of
+        pipeline ->
+            maybe_retry_queue(Pipeline, State);
+        _ ->
+            maybe_retry_queue(KeepAlive, State)
+    end,
 
     %% Cancel timers
     cancel_timers(Timers),
@@ -328,8 +333,9 @@ terminate(normal,
     http_transport:close(SocketType, Socket);
 
 terminate(_Reason, #state{session = #session{id          = Id,
-                                            socket      = Socket, 
-                                            socket_type = SocketType},
+                                             socket      = Socket,
+                                             type        = Type,
+                                             socket_type = SocketType},
                     request      = undefined,
                     profile_name = ProfileName,
                     timers       = Timers,
@@ -339,8 +345,12 @@ terminate(_Reason, #state{session = #session{id          = Id,
     %% Clobber session
     (catch httpc_manager:delete_session(Id, ProfileName)),
 
-    maybe_retry_queue(Pipeline, State),
-    maybe_retry_queue(KeepAlive, State),
+    case Type of
+        pipeline ->
+            maybe_retry_queue(Pipeline, State);
+        _ ->
+            maybe_retry_queue(KeepAlive, State)
+    end,
 
     cancel_timer(Timers#timers.queue_timer, timeout_queue),
     http_transport:close(SocketType, Socket);
-- 
2.35.3

openSUSE Build Service is sponsored by