diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-06-19 10:15:48 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-06-19 10:37:50 -0700 |
commit | e4de78aec504b885d40c0244ce3222c05ca3dc2e (patch) | |
tree | 4fcce3e7d4ad21025d43193c783cef1b81ba7ae6 | |
parent | a01d9dae1c06014497096e23d91f8d633a41d178 (diff) | |
download | rails-e4de78aec504b885d40c0244ce3222c05ca3dc2e.tar.gz rails-e4de78aec504b885d40c0244ce3222c05ca3dc2e.tar.bz2 rails-e4de78aec504b885d40c0244ce3222c05ca3dc2e.zip |
reduce thread locals
-rw-r--r-- | activesupport/lib/active_support/notifications.rb | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/activesupport/lib/active_support/notifications.rb b/activesupport/lib/active_support/notifications.rb index 2e2314cad5..12bcd6d308 100644 --- a/activesupport/lib/active_support/notifications.rb +++ b/activesupport/lib/active_support/notifications.rb @@ -137,6 +137,23 @@ module ActiveSupport module Notifications @instrumenters = Hash.new { |h,k| h[k] = notifier.listening?(k) } + class Registry # :nodoc: + def self.instance + Thread.current[name] ||= new + end + + attr_reader :notifier, :instrumenter + + def initialize + self.notifier = Fanout.new + end + + def notifier=(notifier) + @notifier = notifier + @instrumenter = Instrumenter.new(notifier) + end + end + class << self def publish(name, *args) notifier.publish(name, *args) @@ -169,15 +186,15 @@ module ActiveSupport end def instrumenter - Thread.current[:"instrumentation_#{notifier.object_id}"] ||= Instrumenter.new(notifier) + Registry.instance.instrumenter end def notifier - Thread.current[:notifier] ||= Fanout.new + Registry.instance.notifier end def notifier=(notifier) - Thread.current[:notifier] = notifier + Registry.instance.notifier = notifier end end end |