summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2012-09-25 14:18:13 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2012-09-25 14:18:13 +0100
commita1ff10f18797242049fdeb8222c0ef6e9eecbbe9 (patch)
tree5e03d46d231706058dfd24b394151b38caa18b5e
parentca157cb17c62a28fe807e7f50c4cb6e7263a1fa5 (diff)
downloadrabbitmq-server-a1ff10f18797242049fdeb8222c0ef6e9eecbbe9.tar.gz
generalise pmon
-rw-r--r--src/pmon.erl32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/pmon.erl b/src/pmon.erl
index 45786577..1aeebb72 100644
--- a/src/pmon.erl
+++ b/src/pmon.erl
@@ -27,37 +27,39 @@
-opaque(?MODULE() :: dict()).
+-type(item() :: pid() | {atom(), node()}).
+
-spec(new/0 :: () -> ?MODULE()).
--spec(monitor/2 :: (pid(), ?MODULE()) -> ?MODULE()).
--spec(monitor_all/2 :: ([pid()], ?MODULE()) -> ?MODULE()).
--spec(demonitor/2 :: (pid(), ?MODULE()) -> ?MODULE()).
--spec(is_monitored/2 :: (pid(), ?MODULE()) -> boolean()).
--spec(erase/2 :: (pid(), ?MODULE()) -> ?MODULE()).
--spec(monitored/1 :: (?MODULE()) -> [pid()]).
+-spec(monitor/2 :: (item(), ?MODULE()) -> ?MODULE()).
+-spec(monitor_all/2 :: ([item()], ?MODULE()) -> ?MODULE()).
+-spec(demonitor/2 :: (item(), ?MODULE()) -> ?MODULE()).
+-spec(is_monitored/2 :: (item(), ?MODULE()) -> boolean()).
+-spec(erase/2 :: (item(), ?MODULE()) -> ?MODULE()).
+-spec(monitored/1 :: (?MODULE()) -> [item()]).
-spec(is_empty/1 :: (?MODULE()) -> boolean()).
-endif.
new() -> dict:new().
-monitor(Pid, M) ->
- case dict:is_key(Pid, M) of
+monitor(Item, M) ->
+ case dict:is_key(Item, M) of
true -> M;
- false -> dict:store(Pid, erlang:monitor(process, Pid), M)
+ false -> dict:store(Item, erlang:monitor(process, Item), M)
end.
-monitor_all(Pids, M) -> lists:foldl(fun monitor/2, M, Pids).
+monitor_all(Items, M) -> lists:foldl(fun monitor/2, M, Items).
-demonitor(Pid, M) ->
- case dict:find(Pid, M) of
+demonitor(Item, M) ->
+ case dict:find(Item, M) of
{ok, MRef} -> erlang:demonitor(MRef),
- dict:erase(Pid, M);
+ dict:erase(Item, M);
error -> M
end.
-is_monitored(Pid, M) -> dict:is_key(Pid, M).
+is_monitored(Item, M) -> dict:is_key(Item, M).
-erase(Pid, M) -> dict:erase(Pid, M).
+erase(Item, M) -> dict:erase(Item, M).
monitored(M) -> dict:fetch_keys(M).