Less state, less bugs

This commit is contained in:
Brian J. Cardiff 2023-07-19 22:37:34 -03:00
parent 27d9ca0a84
commit a5476338b1

View file

@ -57,8 +57,6 @@ module DB
# communicate that a connection is available for checkout # communicate that a connection is available for checkout
@availability_channel : Channel(Nil) @availability_channel : Channel(Nil)
# signal how many existing connections are waited for
@waiting_resource : Int32
# global pool mutex # global pool mutex
@mutex : Mutex @mutex : Mutex
@ -82,7 +80,6 @@ module DB
@retry_delay = pool_options.retry_delay @retry_delay = pool_options.retry_delay
@availability_channel = Channel(Nil).new @availability_channel = Channel(Nil).new
@waiting_resource = 0
@inflight = 0 @inflight = 0
@mutex = Mutex.new @mutex = Mutex.new
@ -284,25 +281,13 @@ module DB
end end
private def wait_for_available private def wait_for_available
sync_inc_waiting_resource
select select
when @availability_channel.receive when @availability_channel.receive
sync_dec_waiting_resource
when timeout(@checkout_timeout.seconds) when timeout(@checkout_timeout.seconds)
sync_dec_waiting_resource
raise DB::PoolTimeout.new("Could not check out a connection in #{@checkout_timeout} seconds") raise DB::PoolTimeout.new("Could not check out a connection in #{@checkout_timeout} seconds")
end end
end end
private def sync_inc_waiting_resource
sync { @waiting_resource += 1 }
end
private def sync_dec_waiting_resource
sync { @waiting_resource -= 1 }
end
private def sync private def sync
@mutex.lock @mutex.lock
begin begin