提交 a8439bc4 编写于 作者: G Guo Xiang Tan

Avoid looping through subscribers when unsubscribing with a subscriber object.

上级 a67fdc02
...@@ -27,7 +27,13 @@ def subscribe(pattern = nil, block = Proc.new) ...@@ -27,7 +27,13 @@ def subscribe(pattern = nil, block = Proc.new)
def unsubscribe(subscriber_or_name) def unsubscribe(subscriber_or_name)
synchronize do synchronize do
@subscribers.reject! { |s| s.matches?(subscriber_or_name) } case subscriber_or_name
when String
@subscribers.reject! { |s| s.matches?(subscriber_or_name) }
else
@subscribers.delete(subscriber_or_name)
end
@listeners_for.clear @listeners_for.clear
end end
end end
...@@ -97,12 +103,11 @@ def finish(name, id, payload) ...@@ -97,12 +103,11 @@ def finish(name, id, payload)
end end
def subscribed_to?(name) def subscribed_to?(name)
@pattern === name.to_s @pattern === name
end end
def matches?(subscriber_or_name) def matches?(name)
self === subscriber_or_name || @pattern && @pattern === name
@pattern && @pattern === subscriber_or_name
end end
end end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册