Skip to content

Commit cc100da

Browse files
authored
Observers clear references (#298)
Process level (`CableReady::Config` - `@observer_peers`) channel clearing. Possible memory leak fix. Fixes #297
1 parent 2ab621b commit cc100da

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

lib/cable_ready/channels.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def broadcast(*identifiers, clear: true)
2727
.select { |channel| channel.identifier.is_a?(String) }
2828
.tap do |channels|
2929
channels.each { |channel| @channels[channel.identifier].broadcast(clear: clear) }
30-
channels.each { |channel| @channels.except!(channel.identifier) if clear }
30+
channels.each { |channel| clear_channel(channel) if clear }
3131
end
3232
end
3333

@@ -37,8 +37,16 @@ def broadcast_to(model, *identifiers, clear: true)
3737
.reject { |channel| channel.identifier.is_a?(String) }
3838
.tap do |channels|
3939
channels.each { |channel| @channels[channel.identifier].broadcast_to(model, clear: clear) }
40-
channels.each { |channel| @channels.except!(channel.identifier) if clear }
40+
channels.each { |channel| clear_channel(channel) if clear }
4141
end
4242
end
43+
44+
private
45+
46+
def clear_channel(channel)
47+
@channels.except!(channel.identifier)
48+
observer = CableReady.config.observers.find { |o| o.try(:identifier) == channel.identifier }
49+
CableReady.config.delete_observer(observer) if observer
50+
end
4351
end
4452
end

0 commit comments

Comments
 (0)