diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2013-08-19 10:09:04 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2013-08-19 10:09:04 +0100 |
| commit | 28a0f963f7d201895964b6c8328dc0935b431806 (patch) | |
| tree | b65a046ac84ed9ef1c762c07e6d69c3d9e7819cf /src/delegate.erl | |
| parent | 687b6cc913351b42ffdb4fda883e6c1243beae4f (diff) | |
| download | rabbitmq-server-git-28a0f963f7d201895964b6c8328dc0935b431806.tar.gz | |
Use gb_sets rather than sets for performance.
Diffstat (limited to 'src/delegate.erl')
| -rw-r--r-- | src/delegate.erl | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/delegate.erl b/src/delegate.erl index 50518dedd5..c10e73436f 100644 --- a/src/delegate.erl +++ b/src/delegate.erl @@ -193,11 +193,11 @@ handle_cast({monitor, MonitoringPid, Pid}, State = #state{monitors = Monitors}) -> Monitors1 = case dict:find(Pid, Monitors) of {ok, {Ref, Pids}} -> - Pids1 = sets:add_element(MonitoringPid, Pids), + Pids1 = gb_sets:add_element(MonitoringPid, Pids), dict:store(Pid, {Ref, Pids1}, Monitors); error -> Ref = erlang:monitor(process, Pid), - Pids = sets:from_list([MonitoringPid]), + Pids = gb_sets:from_list([MonitoringPid]), dict:store(Pid, {Ref, Pids}, Monitors) end, {noreply, State#state{monitors = Monitors1}, hibernate}; @@ -206,8 +206,8 @@ handle_cast({demonitor, MonitoringPid, Pid}, State = #state{monitors = Monitors}) -> Monitors1 = case dict:find(Pid, Monitors) of {ok, {Ref, Pids}} -> - Pids1 = sets:del_element(MonitoringPid, Pids), - case sets:size(Pids1) of + Pids1 = gb_sets:del_element(MonitoringPid, Pids), + case gb_sets:size(Pids1) of 0 -> erlang:demonitor(Ref), dict:erase(Pid, Monitors); _ -> dict:store(Pid, {Ref, Pids1}, Monitors) @@ -227,8 +227,8 @@ handle_info({'DOWN', Ref, process, Pid, Info}, case dict:find(Pid, Monitors) of {ok, {Ref, Pids}} -> Msg = {'DOWN', {Name, Pid}, process, Pid, Info}, - sets:fold(fun (MonitoringPid, _) -> MonitoringPid ! Msg end, - none, Pids), + gb_sets:fold(fun (MonitoringPid, _) -> MonitoringPid ! Msg end, + none, Pids), State#state{monitors = dict:erase(Pid, Monitors)}; error -> State |
