diff options
Diffstat (limited to 'src/gen_mod.erl')
-rw-r--r-- | src/gen_mod.erl | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/gen_mod.erl b/src/gen_mod.erl index 29fbb1104..4333729ee 100644 --- a/src/gen_mod.erl +++ b/src/gen_mod.erl @@ -72,22 +72,34 @@ start_module(Host, Module, Opts) -> ok end. +%% @doc Stop the module in a host, and forget its configuration. stop_module(Host, Module) -> + case stop_module_keep_config(Host, Module) of + error -> + error; + ok -> + del_module_mnesia(Host, Module) + end. + +%% @doc Stop the module in a host, but keep its configuration. +%% As the module configuration is kept in the Mnesia local_config table, +%% when ejabberd is restarted the module will be started again. +%% This function is useful when ejabberd is being stopped +%% and it stops all modules. +stop_module_keep_config(Host, Module) -> case catch Module:stop(Host) of {'EXIT', Reason} -> - ?ERROR_MSG("~p", [Reason]); + ?ERROR_MSG("~p", [Reason]), + error; {wait, ProcList} when is_list(ProcList) -> lists:foreach(fun wait_for_process/1, ProcList), - del_module_mnesia(Host, Module), ets:delete(ejabberd_modules, {Module, Host}), ok; {wait, Process} -> wait_for_process(Process), - del_module_mnesia(Host, Module), ets:delete(ejabberd_modules, {Module, Host}), ok; _ -> - del_module_mnesia(Host, Module), ets:delete(ejabberd_modules, {Module, Host}), ok end. |