aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2012-05-19 11:39:17 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2012-05-19 11:39:17 -0700
commit23fad29c1932119898259eab557162c1326fd325 (patch)
tree18a87a531e4ef3d7811237175f617c92e5f78141
parent777d53901427ea183170c932d27eb43ce9fa5800 (diff)
parentc2d416fe7712cbaf69036f9e638c825e08415e34 (diff)
downloadrails-23fad29c1932119898259eab557162c1326fd325.tar.gz
rails-23fad29c1932119898259eab557162c1326fd325.tar.bz2
rails-23fad29c1932119898259eab557162c1326fd325.zip
Merge pull request #6398 from pmahoney/threadsafe-connection-pool
Synchronize read and modification of @reserved_connections
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb12
1 files changed, 8 insertions, 4 deletions
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 46c7fc71ac..c6699737b4 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
@@ -139,14 +139,18 @@ module ActiveRecord
# #connection can be called any number of times; the connection is
# held in a hash keyed by the thread id.
def connection
- @reserved_connections[current_connection_id] ||= checkout
+ synchronize do
+ @reserved_connections[current_connection_id] ||= checkout
+ end
end
# Is there an open connection that is being used for the current thread?
def active_connection?
- @reserved_connections.fetch(current_connection_id) {
- return false
- }.in_use?
+ synchronize do
+ @reserved_connections.fetch(current_connection_id) {
+ return false
+ }.in_use?
+ end
end
# Signal that the thread is finished with the current connection.