summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2013-08-17 12:28:30 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2013-08-17 12:28:30 +0100
commitd6f951c8d605486199b0209f92f4f059a75f2bde (patch)
tree4df15e48058643fcb5c546d13ae013d74199bd44
parente6dea0cc8a3b1b809715d6ef4be817b211003c85 (diff)
downloadrabbitmq-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.erl19
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;