From ad902c2e16c231bac161b80f9d444afec7781448 Mon Sep 17 00:00:00 2001 From: Evgeny Khramtsov Date: Thu, 18 Jul 2019 21:48:53 +0300 Subject: [PATCH] Don't forget to unregister route when the owning process is dead --- src/ejabberd_router.erl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl index fe2db0ce0..a8a471258 100644 --- a/src/ejabberd_router.erl +++ b/src/ejabberd_router.erl @@ -358,6 +358,9 @@ handle_info({'DOWN', MRef, _, Pid, Info}, State) -> ?DEBUG("Process ~p with route registered to ~s " "has terminated unexpectedly with reason: ~p", [P, Domain, Info]), + try unregister_route(Domain, Pid) + catch _:_ -> ok + end, false; (_, _) -> true @@ -462,7 +465,12 @@ monitor_route(Domain, Pid) -> -spec demonitor_route(binary(), pid()) -> ok. demonitor_route(Domain, Pid) -> - ?GEN_SERVER:call(?MODULE, {demonitor, Domain, Pid}, ?CALL_TIMEOUT). + case whereis(?MODULE) == self() of + true -> + ok; + false -> + ?GEN_SERVER:call(?MODULE, {demonitor, Domain, Pid}, ?CALL_TIMEOUT) + end. -spec get_backend() -> module(). get_backend() ->