diff options
| author | Badlop <badlop@process-one.net> | 2008-07-30 18:11:14 +0000 | 
|---|---|---|
| committer | Badlop <badlop@process-one.net> | 2008-07-30 18:11:14 +0000 | 
| commit | 2660bc514f5f4426367829091b34792d6a853bb8 (patch) | |
| tree | 9195a019728ee3cdeeaac63d04ce5118645ed332 /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.erl | 2 | ||||
| -rw-r--r-- | src/gen_mod.erl | 20 | 
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. | 
