From a65500b6aa6de8c57731a07f212abd7aef541646 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Wed, 14 Feb 2018 13:09:27 +0300 Subject: [PATCH] Fix external components unregistration --- src/ejabberd_service.erl | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl index 8cfaa6314..de4ab1fd2 100644 --- a/src/ejabberd_service.erl +++ b/src/ejabberd_service.erl @@ -213,17 +213,27 @@ handle_info(Info, State) -> ?ERROR_MSG("Unexpected info: ~p", [Info]), State. -terminate(Reason, #{stream_state := StreamState, host_opts := HostOpts}) -> +terminate(Reason, #{stream_state := StreamState, + host_opts := HostOpts, + remote_server := RemoteServer, + global_routes := GlobalRoutes}) -> case StreamState of established -> + Routes = if GlobalRoutes -> + dict:fetch_keys(HostOpts); + true -> + [RemoteServer] + end, lists:foreach( fun(H) -> ejabberd_router:unregister_route(H), ejabberd_hooks:run(component_disconnected, [H, Reason]) - end, dict:fetch_keys(HostOpts)); + end, Routes); _ -> ok - end. + end; +terminate(_Reason, _State) -> + ok. code_change(_OldVsn, State, _Extra) -> {ok, State}.