diff options
author | thedarkone <thedarkone2@gmail.com> | 2015-11-28 01:40:21 +0100 |
---|---|---|
committer | thedarkone <thedarkone2@gmail.com> | 2015-11-28 01:40:21 +0100 |
commit | ab3c4a4083cce34131eeb23df42041fafe063fc3 (patch) | |
tree | 73418a2a78df36fc4ff0ac62202f39be66713ef7 /activesupport/test | |
parent | 9d7d12c0044751a494162760cd018fb66eab200f (diff) | |
download | rails-ab3c4a4083cce34131eeb23df42041fafe063fc3.tar.gz rails-ab3c4a4083cce34131eeb23df42041fafe063fc3.tar.bz2 rails-ab3c4a4083cce34131eeb23df42041fafe063fc3.zip |
Subscribing to notifications while inside the said instrumented section.
The issue is that on the exit from Instrumenter#instrument section,
an Evented listener will run into an error because its thread local
(Thread.current[:_timestack]) has not been set up by the #start
method (this obviously happens because the Evented listeners didn't
exist at the time, since no subscribtion to that section was made yet).
Note: support for subscribing to instrumented sections, while being
inside those instrumented sections, might be removed in the future.
Maybe fixes #21873.
Diffstat (limited to 'activesupport/test')
-rw-r--r-- | activesupport/test/notifications_test.rb | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/activesupport/test/notifications_test.rb b/activesupport/test/notifications_test.rb index f729f0a95b..d9cc392ac9 100644 --- a/activesupport/test/notifications_test.rb +++ b/activesupport/test/notifications_test.rb @@ -42,6 +42,21 @@ module Notifications ActiveSupport::Notifications.instrument(name) assert_equal expected, events end + + def test_subsribing_to_instrumentation_while_inside_it + # the repro requires that there are no evented subscribers for the "foo" event, + # so we have to duplicate some of the setup code + old_notifier = ActiveSupport::Notifications.notifier + ActiveSupport::Notifications.notifier = ActiveSupport::Notifications::Fanout.new + + ActiveSupport::Notifications.subscribe('foo', TestSubscriber.new) + + ActiveSupport::Notifications.instrument('foo') do + ActiveSupport::Notifications.subscribe('foo') {} + end + ensure + ActiveSupport::Notifications.notifier = old_notifier + end end class UnsubscribeTest < TestCase |