aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@plataformatec.com.br>2012-12-19 07:28:25 -0800
committerJosé Valim <jose.valim@plataformatec.com.br>2012-12-19 07:28:25 -0800
commitb225693a0d86f2e33c66049a69e5148e5c93b7cd (patch)
tree30551bc5ad41bceaf5c6f212cd6ecc47f2198f4b
parent939ff861396857d6a476b5a2e8c53a69d8305688 (diff)
parent5c335420c81f0b9dfa6a22336a21dce1912e5c7f (diff)
downloadrails-b225693a0d86f2e33c66049a69e5148e5c93b7cd.tar.gz
rails-b225693a0d86f2e33c66049a69e5148e5c93b7cd.tar.bz2
rails-b225693a0d86f2e33c66049a69e5148e5c93b7cd.zip
Merge pull request #8559 from mshytikov/runner_method_is_slow_with_thread_safe
Attempt to fix slow runner name method
-rw-r--r--activesupport/lib/active_support/callbacks.rb11
1 files changed, 10 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/callbacks.rb b/activesupport/lib/active_support/callbacks.rb
index 3a8353857e..e772a297fc 100644
--- a/activesupport/lib/active_support/callbacks.rb
+++ b/activesupport/lib/active_support/callbacks.rb
@@ -1,3 +1,4 @@
+require 'thread_safe'
require 'active_support/concern'
require 'active_support/descendants_tracker'
require 'active_support/core_ext/class/attribute'
@@ -351,10 +352,18 @@ module ActiveSupport
undef_method(name) if method_defined?(name)
end
- def __callback_runner_name(kind)
+ def __callback_runner_name_cache
+ @__callback_runner_name_cache ||= ThreadSafe::Cache.new {|cache, kind| cache[kind] = __generate_callback_runner_name(kind) }
+ end
+
+ def __generate_callback_runner_name(kind)
"_run__#{self.name.hash.abs}__#{kind}__callbacks"
end
+ def __callback_runner_name(kind)
+ __callback_runner_name_cache[kind]
+ end
+
# This is used internally to append, prepend and skip callbacks to the
# CallbackChain.
def __update_callbacks(name, filters = [], block = nil) #:nodoc: