提交 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)
def unsubscribe(subscriber_or_name)
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
end
end
......@@ -97,12 +103,11 @@ def finish(name, id, payload)
end
def subscribed_to?(name)
@pattern === name.to_s
@pattern === name
end
def matches?(subscriber_or_name)
self === subscriber_or_name ||
@pattern && @pattern === subscriber_or_name
def matches?(name)
@pattern && @pattern === name
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册