25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-10-31 15:21:38 +01:00

* src/gen_mod.erl: When ejabberd is kindly stopped, don't forget

modules configuration (EJAB-706)
* src/ejabberd_app.erl: Likewise

SVN Revision: 1497
This commit is contained in:
Badlop 2008-07-30 18:11:14 +00:00
parent d22154a2d4
commit 4f1fe31627
3 changed files with 21 additions and 5 deletions

View File

@ -1,5 +1,9 @@
2008-07-30 Badlop <badlop@process-one.net> 2008-07-30 Badlop <badlop@process-one.net>
* src/gen_mod.erl: When ejabberd is kindly stopped, don't forget
modules configuration (EJAB-706)
* src/ejabberd_app.erl: Likewise
* src/msgs/uk.msg: Fix: each string in a single line * src/msgs/uk.msg: Fix: each string in a single line
* src/msgs/wa.msg: Likewise * src/msgs/wa.msg: Likewise

View File

@ -153,7 +153,7 @@ stop_modules() ->
Modules -> Modules ->
lists:foreach( lists:foreach(
fun({Module, _Args}) -> fun({Module, _Args}) ->
gen_mod:stop_module(Host, Module) gen_mod:stop_module_keep_config(Host, Module)
end, Modules) end, Modules)
end end
end, ?MYHOSTS). end, ?MYHOSTS).

View File

@ -72,22 +72,34 @@ start_module(Host, Module, Opts) ->
ok ok
end. end.
%% @doc Stop the module in a host, and forget its configuration.
stop_module(Host, Module) -> 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 case catch Module:stop(Host) of
{'EXIT', Reason} -> {'EXIT', Reason} ->
?ERROR_MSG("~p", [Reason]); ?ERROR_MSG("~p", [Reason]),
error;
{wait, ProcList} when is_list(ProcList) -> {wait, ProcList} when is_list(ProcList) ->
lists:foreach(fun wait_for_process/1, ProcList), lists:foreach(fun wait_for_process/1, ProcList),
del_module_mnesia(Host, Module),
ets:delete(ejabberd_modules, {Module, Host}), ets:delete(ejabberd_modules, {Module, Host}),
ok; ok;
{wait, Process} -> {wait, Process} ->
wait_for_process(Process), wait_for_process(Process),
del_module_mnesia(Host, Module),
ets:delete(ejabberd_modules, {Module, Host}), ets:delete(ejabberd_modules, {Module, Host}),
ok; ok;
_ -> _ ->
del_module_mnesia(Host, Module),
ets:delete(ejabberd_modules, {Module, Host}), ets:delete(ejabberd_modules, {Module, Host}),
ok ok
end. end.