Skip to content

Commit 81a16cb

Browse files
committed
Merge pull request rails#25030 from mmmpa/pull_request
ActionCable, sometimes add_channel is not called.
1 parent 16de855 commit 81a16cb

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

actioncable/lib/action_cable/subscription_adapter/subscriber_map.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,11 @@ def remove_subscriber(channel, subscriber)
3232
end
3333

3434
def broadcast(channel, message)
35-
list = @sync.synchronize { @subscribers[channel].dup }
35+
list = @sync.synchronize do
36+
return if !@subscribers.key?(channel)
37+
@subscribers[channel].dup
38+
end
39+
3640
list.each do |subscriber|
3741
invoke_callback(subscriber, message)
3842
end
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
require 'test_helper'
2+
3+
class SubscriberMapTest < ActionCable::TestCase
4+
test "broadcast should not change subscribers" do
5+
setup_subscription_map
6+
origin = @subscription_map.instance_variable_get(:@subscribers).dup
7+
8+
@subscription_map.broadcast('not_exist_channel', '')
9+
10+
assert_equal origin, @subscription_map.instance_variable_get(:@subscribers)
11+
end
12+
13+
private
14+
def setup_subscription_map
15+
@subscription_map = ActionCable::SubscriptionAdapter::SubscriberMap.new
16+
end
17+
end

0 commit comments

Comments
 (0)