diff options
| author | Matthias Radestock <matthias@rabbitmq.com> | 2013-08-17 12:28:30 +0100 |
|---|---|---|
| committer | Matthias Radestock <matthias@rabbitmq.com> | 2013-08-17 12:28:30 +0100 |
| commit | d6f951c8d605486199b0209f92f4f059a75f2bde (patch) | |
| tree | 4df15e48058643fcb5c546d13ae013d74199bd44 | |
| parent | e6dea0cc8a3b1b809715d6ef4be817b211003c85 (diff) | |
| download | rabbitmq-server-git-d6f951c8d605486199b0209f92f4f059a75f2bde.tar.gz | |
we don't really support demonitor/2, so rip it out
due to the aggregration of all monitors of a single pid into a single
monitor, the semantics of demonitor/2 is decidely dodgy
| -rw-r--r-- | src/delegate.erl | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/delegate.erl b/src/delegate.erl index 5ed31d0894..25260aad7d 100644 --- a/src/delegate.erl +++ b/src/delegate.erl @@ -18,8 +18,8 @@ -behaviour(gen_server2). --export([start_link/1, invoke_no_result/2, invoke/2, monitor/2, - demonitor/1, demonitor/2, call/2, cast/2]). +-export([start_link/1, invoke_no_result/2, invoke/2, + monitor/2, demonitor/1, call/2, cast/2]). -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). @@ -43,7 +43,6 @@ -spec(invoke_no_result/2 :: (pid() | [pid()], fun_or_mfa(any())) -> 'ok'). -spec(monitor/2 :: ('process', pid()) -> monitor_ref()). -spec(demonitor/1 :: (monitor_ref()) -> 'true'). --spec(demonitor/2 :: (monitor_ref(), ['flush']) -> 'true'). -spec(call/2 :: ( pid(), any()) -> any(); @@ -131,12 +130,10 @@ monitor(process, Pid) -> gen_server2:cast(Name, {monitor, self(), Pid}), {Name, Pid}. -demonitor(Ref) -> ?MODULE:demonitor(Ref, []). - -demonitor(Ref, Options) when is_reference(Ref) -> - erlang:demonitor(Ref, Options); -demonitor({Name, Pid}, Options) -> - gen_server2:cast(Name, {demonitor, self(), Pid, Options}). +demonitor(Ref) when is_reference(Ref) -> + erlang:demonitor(Ref); +demonitor({Name, Pid}) -> + gen_server2:cast(Name, {demonitor, self(), Pid}). call(PidOrPids, Msg) -> invoke(PidOrPids, {gen_server2, call, [Msg, infinity]}). @@ -205,13 +202,13 @@ handle_cast({monitor, WantsMonitor, Pid}, end, {noreply, State#state{monitors = Monitors1}, hibernate}; -handle_cast({demonitor, WantsMonitor, Pid, Options}, +handle_cast({demonitor, WantsMonitor, 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, Options), + 0 -> erlang:demonitor(Ref), dict:erase(Pid, Monitors); _ -> dict:store(Pid, {Ref, Set1}, Monitors) end; |
