From 01b6cd3aba47b8faf5443c4f1829494480b1d179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20K=C3=B6hler?= Date: Tue, 2 Nov 2010 16:18:16 +0100 Subject: [PATCH] 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. --- src/gen_mod.erl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gen_mod.erl b/src/gen_mod.erl index e3fa13174..909d765d0 100644 --- a/src/gen_mod.erl +++ b/src/gen_mod.erl @@ -81,13 +81,13 @@ start_module2(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.