aboutsummaryrefslogtreecommitdiffstats
path: root/actioncable
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2016-07-04 08:39:02 +0930
committerGitHub <noreply@github.com>2016-07-04 08:39:02 +0930
commit550303c05c48f17b699a13258608e04bf63cf0e8 (patch)
tree4cfc38fbba5f441b13b777f47dcf9f89af54ae3a /actioncable
parentee50de03908f24c377d4842f759182fe9241c6fa (diff)
parent711d232f9344173d6a3f63d5239fe9a41f10e9bc (diff)
downloadrails-550303c05c48f17b699a13258608e04bf63cf0e8.tar.gz
rails-550303c05c48f17b699a13258608e04bf63cf0e8.tar.bz2
rails-550303c05c48f17b699a13258608e04bf63cf0e8.zip
Merge pull request #25030 from mmmpa/pull_request
ActionCable, sometimes add_channel is not called.
Diffstat (limited to 'actioncable')
-rw-r--r--actioncable/lib/action_cable/subscription_adapter/subscriber_map.rb6
-rw-r--r--actioncable/test/subscription_adapter/subscriber_map_test.rb17
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