diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb index e6b6b60c1b..ee51419f8d 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb @@ -350,8 +350,7 @@ module ActiveRecord # currently in the process of independently establishing connections to the DB. @now_connecting = 0 - # A boolean toggle that allows/disallows new connections. - @new_cons_enabled = true + @new_cons_blocks = 0 @available = ConnectionLeasingQueue.new self end @@ -700,13 +699,10 @@ module ActiveRecord end def with_new_connections_blocked - previous_value = nil - synchronize do - previous_value, @new_cons_enabled = @new_cons_enabled, false - end + synchronize { @new_cons_blocks += 1 } yield ensure - synchronize { @new_cons_enabled = previous_value } + synchronize { @new_cons_blocks -= 1 } end # Acquire a connection by one of 1) immediately removing one @@ -758,7 +754,7 @@ module ActiveRecord # and increment @now_connecting, to prevent overstepping this pool's @size # constraint do_checkout = synchronize do - if @new_cons_enabled && (@connections.size + @now_connecting) < @size + if @new_cons_blocks.zero? && (@connections.size + @now_connecting) < @size @now_connecting += 1 end end