diff options
author | mmmpa <mmmpa.mmmpa@gmail.com> | 2016-05-16 13:07:35 +0900 |
---|---|---|
committer | mmmpa <mmmpa.mmmpa@gmail.com> | 2016-05-26 05:22:56 +0900 |
commit | 711d232f9344173d6a3f63d5239fe9a41f10e9bc (patch) | |
tree | bb4a4c3b0186bdc379ad7dce81e05fbfc96839e9 /actioncable | |
parent | e0dbf155ed8f1047f5bca22a4b3718f063d968a0 (diff) | |
download | rails-711d232f9344173d6a3f63d5239fe9a41f10e9bc.tar.gz rails-711d232f9344173d6a3f63d5239fe9a41f10e9bc.tar.bz2 rails-711d232f9344173d6a3f63d5239fe9a41f10e9bc.zip |
Add guard to broadcast.
Diffstat (limited to 'actioncable')
-rw-r--r-- | actioncable/lib/action_cable/subscription_adapter/subscriber_map.rb | 6 | ||||
-rw-r--r-- | actioncable/test/subscription_adapter/subscriber_map_test.rb | 17 |
2 files changed, 22 insertions, 1 deletions
diff --git a/actioncable/lib/action_cable/subscription_adapter/subscriber_map.rb b/actioncable/lib/action_cable/subscription_adapter/subscriber_map.rb index 37eed09793..4ec513e3ba 100644 --- a/actioncable/lib/action_cable/subscription_adapter/subscriber_map.rb +++ b/actioncable/lib/action_cable/subscription_adapter/subscriber_map.rb @@ -32,7 +32,11 @@ module ActionCable end def broadcast(channel, message) - list = @sync.synchronize { @subscribers[channel].dup } + list = @sync.synchronize do + return if !@subscribers.key?(channel) + @subscribers[channel].dup + end + list.each do |subscriber| invoke_callback(subscriber, message) end diff --git a/actioncable/test/subscription_adapter/subscriber_map_test.rb b/actioncable/test/subscription_adapter/subscriber_map_test.rb new file mode 100644 index 0000000000..5965ac2b90 --- /dev/null +++ b/actioncable/test/subscription_adapter/subscriber_map_test.rb @@ -0,0 +1,17 @@ +require 'test_helper' + +class SubscriberMapTest < ActionCable::TestCase + test "broadcast should not change subscribers" do + setup_subscription_map + origin = @subscription_map.instance_variable_get(:@subscribers).dup + + @subscription_map.broadcast('not_exist_channel', '') + + assert_equal origin, @subscription_map.instance_variable_get(:@subscribers) + end + + private + def setup_subscription_map + @subscription_map = ActionCable::SubscriptionAdapter::SubscriberMap.new + end +end |