    # File lib/active_record/connection_adapters/abstract/connection_pool.rb, line 181
          def checkout
            # Checkout an available connection
            @connection_mutex.synchronize do
              loop do
                conn = if @checked_out.size < @connections.size
                         checkout_existing_connection
                       elsif @connections.size < @size
                         checkout_new_connection
                       end
                return conn if conn
                # No connections available; wait for one
                if @queue.wait(@timeout)
                  next
                else
                  # try looting dead threads
                  clear_stale_cached_connections!
                  if @size == @checked_out.size
                    raise ConnectionTimeoutError, "could not obtain a database connection#{" within #{@timeout} seconds" if @timeout}.  The max pool size is currently #{@size}; consider increasing it."
                  end
                end
              end
            end
          end