From 6e76f8f5c05cb2f00d7a2f4d58e6dd35a23655f6 Mon Sep 17 00:00:00 2001 From: Sergey Nartimov Date: Tue, 17 Jan 2012 01:40:01 +0300 Subject: use thread variable in TaggedLogging previous solution can cause race conditions under GIL-free ruby implementations --- activesupport/lib/active_support/tagged_logging.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/activesupport/lib/active_support/tagged_logging.rb b/activesupport/lib/active_support/tagged_logging.rb index dc3ca25938..4e2e1a1ff5 100644 --- a/activesupport/lib/active_support/tagged_logging.rb +++ b/activesupport/lib/active_support/tagged_logging.rb @@ -14,7 +14,6 @@ module ActiveSupport class TaggedLogging def initialize(logger) @logger = logger - @tags = Hash.new { |h,k| h[k] = [] } end def tagged(*new_tags) @@ -39,7 +38,7 @@ module ActiveSupport end def flush - @tags.delete(Thread.current) + current_tags.clear @logger.flush if @logger.respond_to?(:flush) end @@ -57,7 +56,7 @@ module ActiveSupport end def current_tags - @tags[Thread.current] + Thread.current[:activesupport_tagged_logging_tags] ||= [] end end end -- cgit v1.2.3