summaryrefslogtreecommitdiff
path: root/src/ejabberd_router.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_router.erl')
-rw-r--r--src/ejabberd_router.erl17
1 files changed, 17 insertions, 0 deletions
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.