aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb32
1 files changed, 25 insertions, 7 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 68498b5dc5..4ff3cb0071 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
@@ -294,15 +294,33 @@ module ActiveRecord
@frequency = frequency
end
+ @@mutex = Mutex.new
+ @@pools = {}
+
+ def self.register_pool(pool, frequency) # :nodoc:
+ @@mutex.synchronize do
+ if @@pools.key?(frequency)
+ @@pools[frequency] << pool
+ else
+ @@pools[frequency] = [pool]
+ Thread.new(frequency) do |t|
+ loop do
+ sleep t
+ @@mutex.synchronize do
+ @@pools[frequency].each do |p|
+ p.reap
+ p.flush
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
def run
return unless frequency && frequency > 0
- Thread.new(frequency, pool) { |t, p|
- loop do
- sleep t
- p.reap
- p.flush
- end
- }
+ self.class.register_pool(pool, frequency)
end
end