aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2008-07-30 18:11:14 +0000
committerBadlop <badlop@process-one.net>2008-07-30 18:11:14 +0000
commit2660bc514f5f4426367829091b34792d6a853bb8 (patch)
tree9195a019728ee3cdeeaac63d04ce5118645ed332 /src
parent* doc/guide.tex: Document how to get error message when ejabberd (diff)
* src/gen_mod.erl: When ejabberd is kindly stopped, don't forget
modules configuration (EJAB-706) * src/ejabberd_app.erl: Likewise SVN Revision: 1497
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_app.erl2
-rw-r--r--src/gen_mod.erl20
2 files changed, 17 insertions, 5 deletions
diff --git a/src/ejabberd_app.erl b/src/ejabberd_app.erl
index 8f335ad5b..f1e4413a1 100644
--- a/src/ejabberd_app.erl
+++ b/src/ejabberd_app.erl
@@ -152,7 +152,7 @@ stop_modules() ->
Modules ->
lists:foreach(
fun({Module, _Args}) ->
- gen_mod:stop_module(Host, Module)
+ gen_mod:stop_module_keep_config(Host, Module)
end, Modules)
end
end, ?MYHOSTS).
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.