From e4de78aec504b885d40c0244ce3222c05ca3dc2e Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Tue, 19 Jun 2012 10:15:48 -0700 Subject: [PATCH] reduce thread locals --- .../lib/active_support/notifications.rb | 23 ++++++++++++++++--- 1 file 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 @@ def unsubscribe(args) 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 -- GitLab