25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-26 16:26:24 +01:00

When module start fails during server start, stop erlang (EJAB-1446)

This commit is contained in:
Badlop 2011-05-16 22:33:08 +02:00
parent bd25bd465c
commit 4d2408c9c9

View File

@ -85,11 +85,24 @@ start_module2(Host, Module, Opts) ->
catch Class:Reason -> catch Class:Reason ->
del_module_mnesia(Host, Module), del_module_mnesia(Host, Module),
ets:delete(ejabberd_modules, {Module, Host}), ets:delete(ejabberd_modules, {Module, Host}),
?ERROR_MSG("Problem starting the module ~p for host ~p with options:~n ~p~n ~p: ~p", ErrorText = io_lib:format("Problem starting the module ~p for host ~p ~n options: ~p~n ~p: ~p",
[Module, Host, Opts, Class, Reason]), [Module, Host, Opts, Class, Reason]),
erlang:raise(Class, Reason, erlang:get_stacktrace()) ?CRITICAL_MSG(ErrorText, []),
case is_app_running(ejabberd) of
true ->
erlang:raise(Class, Reason, erlang:get_stacktrace());
false ->
?CRITICAL_MSG("ejabberd initialization was aborted because a module start failed.", []),
timer:sleep(3000),
erlang:halt(lists:flatten(ErrorText))
end
end. end.
is_app_running(AppName) ->
%% Use a high timeout to prevent a false positive in a high load system
Timeout = 15000,
lists:keymember(AppName, 1, application:which_applications(Timeout)).
%% @doc Stop the module in a host, and forget its configuration. %% @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 case stop_module_keep_config(Host, Module) of