From 41cc38aa6fd57a37fa6a9f29be4d1cfd111ef493 Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Tue, 6 Jan 2004 20:37:14 +0000 Subject: [PATCH] * src/ejabberd_router.erl: Added monitoring of processess that serve domains SVN Revision: 197 --- ChangeLog | 3 +++ src/ejabberd_router.erl | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/ChangeLog b/ChangeLog index 63ac79e14..5c502966c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2004-01-06 Alexey Shchepin + * src/ejabberd_router.erl: Added monitoring of processess that + serve domains + * src/ejabberd_app.erl: Bugfix 2004-01-03 Alexey Shchepin diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl index 74352254d..700724eab 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.