Permalink
Browse files

make sure connections returned after close are marked as in_use

  • Loading branch information...
1 parent 7f40b9c commit 0210c44cd31ac4711e8d510c418fb325e3f44fa9 @tenderlove tenderlove committed Mar 12, 2012
@@ -235,6 +235,8 @@ def checkin(conn)
conn.run_callbacks :checkin do
conn.expire
end
+
+ release conn
end
end
@@ -246,10 +248,7 @@ def remove(conn)
# FIXME: we might want to store the key on the connection so that removing
# from the reserved hash will be a little easier.
- thread_id = @reserved_connections.keys.find { |k|
- @reserved_connections[k] == conn
- }
- @reserved_connections.delete thread_id if thread_id
+ release conn
end
end
@@ -267,6 +266,20 @@ def reap
private
+ def release(conn)
+ thread_id = nil
+
+ if @reserved_connections[current_connection_id] == conn
+ thread_id = current_connection_id
+ else
+ thread_id = @reserved_connections.keys.find { |k|
+ @reserved_connections[k] == conn
+ }
+ end
+
+ @reserved_connections.delete thread_id if thread_id
+ end
+
def new_connection
ActiveRecord::Base.send(spec.adapter_method, spec.config)
end
@@ -31,6 +31,16 @@ def active_connections(pool)
pool.connections.find_all(&:in_use?)
end
+ def test_checkout_after_close
+ connection = pool.connection
+ assert connection.in_use?
+
+ connection.close
+ assert !connection.in_use?
+
+ assert pool.connection.in_use?
+ end
+
def test_released_connection_moves_between_threads
thread_conn = nil

0 comments on commit 0210c44

Please sign in to comment.