summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2004-01-06 20:37:14 +0000
committerAlexey Shchepin <alexey@process-one.net>2004-01-06 20:37:14 +0000
commit41cc38aa6fd57a37fa6a9f29be4d1cfd111ef493 (patch)
treeea09bbef04018affa7818be89ec5438576226213
parent* src/ejabberd_app.erl: Bugfix (diff)
* src/ejabberd_router.erl: Added monitoring of processess that
serve domains SVN Revision: 197
-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.