Skip to content

Commit 23d44cb

Browse files
committed
Add protection timeout for the intermediary process
1 parent 5f7beef commit 23d44cb

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

src/hackney_pool.erl

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,17 @@ start() ->
5959
ok.
6060

6161
%% @doc fetch a socket from the pool
62-
checkout(Host, Port, Transport, Client) ->
62+
checkout(Host, Port, Transport, #client{options = Opts} = Client) ->
63+
ConnectTimeout = proplists:get_value(connect_timeout, Opts, 8000),
64+
%% Fall back to using connect_timeout if checkout_timeout is not set
65+
CheckoutTimeout = proplists:get_value(checkout_timeout, Opts, ConnectTimeout),
6366
Requester = self(),
6467
Ref = make_ref(),
6568
Fun =
6669
fun() ->
6770
Result =
6871
try
69-
do_checkout(Requester, Host, Port, Transport, Client)
72+
do_checkout(Requester, Host, Port, Transport, Client, ConnectTimeout, CheckoutTimeout)
7073
catch _:_ ->
7174
{error, checkout_failure}
7275
end,
@@ -76,17 +79,16 @@ checkout(Host, Port, Transport, Client) ->
7679
receive
7780
{checkout, Ref, Result} ->
7881
Result
82+
after CheckoutTimeout ->
83+
{error, checkout_timeout}
7984
end.
8085

8186
do_checkout(Requester, Host, _Port, Transport, #client{options=Opts,
82-
mod_metrics=Metrics}=Client) ->
87+
mod_metrics=Metrics}=Client, ConnectTimeout, CheckoutTimeout) ->
8388
{Connection, ConnectOptions} = hackney_connection:new(Client),
8489
RequestRef = Client#client.request_ref,
8590
PoolName = proplists:get_value(pool, Opts, default),
8691
Pool = find_pool(PoolName, Opts),
87-
ConnectTimeout = proplists:get_value(connect_timeout, Opts, 8000),
88-
%% Fall back to using connect_timeout if checkout_timeout is not set
89-
CheckoutTimeout = proplists:get_value(checkout_timeout, Opts, ConnectTimeout),
9092
case catch gen_server:call(Pool, {checkout, Connection, Requester, RequestRef}, CheckoutTimeout) of
9193
{ok, Socket, Owner} ->
9294

0 commit comments

Comments
 (0)