From 67dcbe06b6ede5fc928d85df37efdbdf8eefef2a Mon Sep 17 00:00:00 2001 From: Benoit Chesneau Date: Wed, 17 Mar 2021 16:06:13 +0100 Subject: [PATCH 1/2] Revert "Link checkout process to fix dangling aborted request" This reverts commit 98b4cc7db0de3d720ce754432b6a890a422d568e. --- src/hackney_pool.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hackney_pool.erl b/src/hackney_pool.erl index 6024a457..c4b79d91 100644 --- a/src/hackney_pool.erl +++ b/src/hackney_pool.erl @@ -72,7 +72,7 @@ checkout(Host, Port, Transport, Client) -> end, Requester ! {checkout, Ref, Result} end, - _ = spawn_link(Fun), + _ = spawn(Fun), receive {checkout, Ref, Result} -> Result From ab6f5a128c4761eb72656aa0f26a587912a1c9d5 Mon Sep 17 00:00:00 2001 From: Benoit Chesneau Date: Wed, 17 Mar 2021 16:20:19 +0100 Subject: [PATCH 2/2] ensuure we release a socket in the pool ensure we release a socket in the pool when the requester died. Changes: Instead of using spawn_link we just spawn the checkout process. Once the result is returned from the pool we check if the process died. If it dies just return the socket in the pool and continue. --- src/hackney_pool.erl | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/hackney_pool.erl b/src/hackney_pool.erl index c4b79d91..38e8d4e8 100644 --- a/src/hackney_pool.erl +++ b/src/hackney_pool.erl @@ -70,7 +70,17 @@ checkout(Host, Port, Transport, Client) -> catch _:_ -> {error, checkout_failure} end, - Requester ! {checkout, Ref, Result} + case is_process_alive(Requester) of + true -> + Requester ! {checkout, Ref, Result}; + false -> + case Result of + {ok, SocketRef, Socket} -> + checkin(SocketRef, Socket); + _Error -> + ok + end + end end, _ = spawn(Fun), receive