25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-10-05 14:51:05 +02:00

Re-raise exceptions caught in gen_mod:start_module/3 (EJAB-1335)

Modules configured by the administrator normally should not be treated
as optional, so a exception (error, exit, throw) to start them should not
be caught and logged only.

This patch re-raises a caught exception instead of ignoring the
exception and inserting the module's opts on success. That way
gen_mod:get_module_opt/4 should work while calling Module:start/2.
This commit is contained in:
Andreas Köhler 2010-11-02 16:18:16 +01:00 committed by Badlop
parent 1f16e4783c
commit c4bc0e7252

View File

@ -66,13 +66,13 @@ start_module(Host, Module, Opts) ->
ets:insert(ejabberd_modules,
#ejabberd_module{module_host = {Module, Host},
opts = Opts}),
case catch Module:start(Host, Opts) of
{'EXIT', Reason} ->
try Module:start(Host, Opts)
catch Class:Reason ->
del_module_mnesia(Host, Module),
ets:delete(ejabberd_modules, {Module, Host}),
?ERROR_MSG("~p", [Reason]);
_ ->
ok
?ERROR_MSG("Problem starting the module ~p for host ~p with options:~n ~p~n ~p: ~p",
[Module, Host, Opts, Class, Reason]),
erlang:raise(Class, Reason, erlang:get_stacktrace())
end.
%% @doc Stop the module in a host, and forget its configuration.