diff options
| author | Matthias Radestock <matthias@rabbitmq.com> | 2013-08-17 12:42:56 +0100 |
|---|---|---|
| committer | Matthias Radestock <matthias@rabbitmq.com> | 2013-08-17 12:42:56 +0100 |
| commit | 687b6cc913351b42ffdb4fda883e6c1243beae4f (patch) | |
| tree | fa50385de87454ac01a0b1770de45b0393f8af18 | |
| parent | d6f951c8d605486199b0209f92f4f059a75f2bde (diff) | |
| download | rabbitmq-server-git-687b6cc913351b42ffdb4fda883e6c1243beae4f.tar.gz | |
cosmetics, better var names, and optimise 'DOWN' sending
| -rw-r--r-- | src/delegate.erl | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/src/delegate.erl b/src/delegate.erl index 25260aad7d..50518dedd5 100644 --- a/src/delegate.erl +++ b/src/delegate.erl @@ -189,31 +189,31 @@ handle_call({invoke, FunOrMFA, Grouped}, _From, State = #state{node = Node}) -> {reply, safe_invoke(orddict:fetch(Node, Grouped), FunOrMFA), State, hibernate}. -handle_cast({monitor, WantsMonitor, Pid}, +handle_cast({monitor, MonitoringPid, Pid}, State = #state{monitors = Monitors}) -> Monitors1 = case dict:find(Pid, Monitors) of - {ok, {Ref, Set}} -> - Set1 = sets:add_element(WantsMonitor, Set), - dict:store(Pid, {Ref, Set1}, Monitors); + {ok, {Ref, Pids}} -> + Pids1 = sets:add_element(MonitoringPid, Pids), + dict:store(Pid, {Ref, Pids1}, Monitors); error -> Ref = erlang:monitor(process, Pid), - Set = sets:from_list([WantsMonitor]), - dict:store(Pid, {Ref, Set}, Monitors) + Pids = sets:from_list([MonitoringPid]), + dict:store(Pid, {Ref, Pids}, Monitors) end, {noreply, State#state{monitors = Monitors1}, hibernate}; -handle_cast({demonitor, WantsMonitor, Pid}, +handle_cast({demonitor, MonitoringPid, Pid}, State = #state{monitors = Monitors}) -> Monitors1 = case dict:find(Pid, Monitors) of - {ok, {Ref, Set}} -> - Set1 = sets:del_element(WantsMonitor, Set), - case sets:size(Set1) of - 0 -> erlang:demonitor(Ref), - dict:erase(Pid, Monitors); - _ -> dict:store(Pid, {Ref, Set1}, Monitors) - end; - error -> - Monitors + {ok, {Ref, Pids}} -> + Pids1 = sets:del_element(MonitoringPid, Pids), + case sets:size(Pids1) of + 0 -> erlang:demonitor(Ref), + dict:erase(Pid, Monitors); + _ -> dict:store(Pid, {Ref, Pids1}, Monitors) + end; + error -> + Monitors end, {noreply, State#state{monitors = Monitors1}, hibernate}; @@ -225,11 +225,10 @@ handle_info({'DOWN', Ref, process, Pid, Info}, State = #state{monitors = Monitors, name = Name}) -> {noreply, case dict:find(Pid, Monitors) of - {ok, {Ref, Set}} -> - sets:fold( - fun (WantsMonitor, _) -> - WantsMonitor ! {'DOWN', {Name, Pid}, process, Pid, Info} - end, none, Set), + {ok, {Ref, Pids}} -> + Msg = {'DOWN', {Name, Pid}, process, Pid, Info}, + sets:fold(fun (MonitoringPid, _) -> MonitoringPid ! Msg end, + none, Pids), State#state{monitors = dict:erase(Pid, Monitors)}; error -> State |
