Skip to content

Commit

Permalink
Observers clear references (#298)
Browse files Browse the repository at this point in the history
Process level (`CableReady::Config` - `@observer_peers`) channel clearing. Possible memory leak fix.

Fixes #297
  • Loading branch information
anaice authored Nov 9, 2024
1 parent 2ab621b commit cc100da
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions lib/cable_ready/channels.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def broadcast(*identifiers, clear: true)
.select { |channel| channel.identifier.is_a?(String) }
.tap do |channels|
channels.each { |channel| @channels[channel.identifier].broadcast(clear: clear) }
channels.each { |channel| @channels.except!(channel.identifier) if clear }
channels.each { |channel| clear_channel(channel) if clear }
end
end

Expand All @@ -37,8 +37,16 @@ def broadcast_to(model, *identifiers, clear: true)
.reject { |channel| channel.identifier.is_a?(String) }
.tap do |channels|
channels.each { |channel| @channels[channel.identifier].broadcast_to(model, clear: clear) }
channels.each { |channel| @channels.except!(channel.identifier) if clear }
channels.each { |channel| clear_channel(channel) if clear }
end
end

private

def clear_channel(channel)
@channels.except!(channel.identifier)
observer = CableReady.config.observers.find { |o| o.try(:identifier) == channel.identifier }
CableReady.config.delete_observer(observer) if observer
end
end
end

0 comments on commit cc100da

Please sign in to comment.