@@ -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
8186do_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