Permalink
Browse files

make active_connection? return true only if there is an open connecti…

…on in use for the current thread. fixes #5330
  • Loading branch information...
1 parent 8a714c4 commit d523504c2f18e459e21a8cfa019ef0620db61b79 @tenderlove tenderlove committed Mar 8, 2012
View
11 activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
@@ -128,10 +128,11 @@ def connection
@reserved_connections[current_connection_id] ||= checkout
end
- # Check to see if there is an active connection in this connection
- # pool.
+ # Is there an open connection that is being used for the current thread?
def active_connection?
- active_connections.any?
+ @reserved_connections.fetch(current_connection_id) {
+ return false
+ }.in_use?
end
# Signal that the thread is finished with the current connection.
@@ -288,10 +289,6 @@ def checkout_and_verify(c)
end
c
end
-
- def active_connections
- @connections.find_all { |c| c.in_use? }
- end
end
# ConnectionHandler is a collection of ConnectionPool objects. It is used
View
35 activerecord/test/cases/connection_pool_test.rb
@@ -3,6 +3,8 @@
module ActiveRecord
module ConnectionAdapters
class ConnectionPoolTest < ActiveRecord::TestCase
+ attr_reader :pool
+
def setup
super
@@ -25,6 +27,39 @@ def teardown
@pool.disconnect!
end
+ def active_connections(pool)
+ pool.connections.find_all(&:in_use?)
+ end
+
+ def test_with_connection
+ assert_equal 0, active_connections(pool).size
+
+ main_thread = pool.connection
+ assert_equal 1, active_connections(pool).size
+
+ Thread.new {
+ pool.with_connection do |conn|
+ assert conn
+ assert_equal 2, active_connections(pool).size
+ end
+ assert_equal 1, active_connections(pool).size
+ }.join
+
+ main_thread.close
+ assert_equal 0, active_connections(pool).size
+ end
+
+ def test_active_connection_in_use
+ assert !pool.active_connection?
+ main_thread = pool.connection
+
+ assert pool.active_connection?
+
+ main_thread.close
+
+ assert !pool.active_connection?
+ end
+
def test_full_pool_exception
assert_raises(PoolFullError) do
(@pool.size + 1).times do

0 comments on commit d523504

Please sign in to comment.