summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--src/ejabberd_router.erl17
2 files changed, 20 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 63ac79e1..5c502966 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2004-01-06 Alexey Shchepin <alexey@sevcom.net>
+ * src/ejabberd_router.erl: Added monitoring of processess that
+ serve domains
+
* src/ejabberd_app.erl: Bugfix
2004-01-03 Alexey Shchepin <alexey@sevcom.net>
diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl
index 74352254..700724ea 100644
--- a/src/ejabberd_router.erl
+++ b/src/ejabberd_router.erl
@@ -38,6 +38,7 @@ init() ->
{attributes,
record_info(fields, route)}]),
mnesia:add_table_copy(route, node(), ram_copies),
+ mnesia:subscribe({table, route, simple}),
loop().
loop() ->
@@ -65,6 +66,22 @@ loop() ->
end,
mnesia:transaction(F),
loop();
+ {mnesia_table_event, {write, #route{pid = Pid}, _ActivityId}} ->
+ erlang:monitor(process, Pid),
+ loop();
+ {'DOWN', _Ref, _Type, Pid, _Info} ->
+ F = fun() ->
+ Es = mnesia:select(
+ route,
+ [{#route{pid = Pid, _ = '_'},
+ [],
+ ['$_']}]),
+ lists:foreach(fun(E) ->
+ mnesia:delete_object(E)
+ end, Es)
+ end,
+ mnesia:transaction(F),
+ loop();
_ ->
loop()
end.