aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
diff options
context:
space:
mode:
authoreileencodes <eileencodes@gmail.com>2017-01-13 16:16:40 -0800
committereileencodes <eileencodes@gmail.com>2017-01-13 16:34:01 -0800
commite15a23fa355ed29d70c2ec573cd7b2418f7ac8db (patch)
tree6794c17dfd4f8a036b985a8ca830c1aa6026df5f /activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
parentf2ef5159073db0fc30e7af59497be7e2f155f807 (diff)
downloadrails-e15a23fa355ed29d70c2ec573cd7b2418f7ac8db.tar.gz
rails-e15a23fa355ed29d70c2ec573cd7b2418f7ac8db.tar.bz2
rails-e15a23fa355ed29d70c2ec573cd7b2418f7ac8db.zip
Fix pool_from_any_process to use most recent spec
If a process is forked more than once, the pool was grabbing the oldest spec, not the most recent spec. This wasn't noticed before because most folks are lilely forking the process only once. If you're forking the process multiple times however the wrong spec name will be returned and an incorrect connection will be used for the process. This fixes the issue by reversing the list of spec names so we can grab the most recent spec rather than the oldest spec.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb2
1 files changed, 1 insertions, 1 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 5ec2fc073e..ce4721c99d 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
@@ -967,7 +967,7 @@ module ActiveRecord
end
def pool_from_any_process_for(spec_name)
- owner_to_pool = @owner_to_pool.values.find { |v| v[spec_name] }
+ owner_to_pool = @owner_to_pool.values.reverse.find { |v| v[spec_name] }
owner_to_pool && owner_to_pool[spec_name]
end
end