From c4bc0e7252dd3e70830e45a3742a200e2c0d096e 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 e17927447..92a5628cb 100644 --- a/src/gen_mod.erl +++ b/src/gen_mod.erl @@ -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.