diff options
author | Badlop <badlop@process-one.net> | 2009-02-13 23:52:24 +0000 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2009-02-13 23:52:24 +0000 |
commit | 70e431787e16ecf7cc090056efd61a3e156b9e75 (patch) | |
tree | ab6b876b9769b4ea46e4d523aef1b72aa346f91b | |
parent | * src/mod_shared_roster.erl: Fix bug: a pending subscription (diff) |
* src/ejabberd_listener.erl: Report error at startup if a listener
module isn't available or is not an ejabberd listener (EJAB-868)
SVN Revision: 1875
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | src/ejabberd_listener.erl | 23 |
2 files changed, 26 insertions, 2 deletions
@@ -1,3 +1,8 @@ +2009-02-14 Badlop <badlop@process-one.net> + + * src/ejabberd_listener.erl: Report error at startup if a listener + module isn't available or is not an ejabberd listener (EJAB-868) + 2009-02-13 Badlop <badlop@process-one.net> * src/mod_shared_roster.erl: Fix bug: a pending subscription diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl index 03948120f..5ca3bdeb0 100644 --- a/src/ejabberd_listener.erl +++ b/src/ejabberd_listener.erl @@ -56,8 +56,13 @@ start_listeners() -> Ls -> Ls2 = lists:map( fun({Port, Module, Opts}) -> - start_listener(Port, Module, Opts) - end, Ls), + case start_listener(Port, Module, Opts) of + {ok, _Pid} = R -> R; + {error, Error} -> + ?ERROR_MSG(Error, []), + throw(Error) + end + end, Ls), report_duplicated_portips(Ls), {ok, {{one_for_one, 10, 1}, Ls2}} end. @@ -225,6 +230,20 @@ accept(ListenSocket, Module, Opts) -> %% @spec (Port, Module, Opts) -> {ok, Pid} | {error, Error} start_listener(Port, Module, Opts) -> + case start_listener2(Port, Module, Opts) of + {ok, _Pid} = R -> R; + {error, {{'EXIT', {undef, _}}, _} = Error} -> + EStr = io_lib:format( + "Error starting the ejabberd listener: ~p.~n" + "It could not be loaded or is not an ejabberd listener.~n" + "Error: ~p~n", [Module, Error]), + {error, lists:flatten(EStr)}; + {error, Error} -> + {error, Error} + end. + +%% @spec (Port, Module, Opts) -> {ok, Pid} | {error, Error} +start_listener2(Port, Module, Opts) -> %% It is only required to start the supervisor in some cases. %% But it doesn't hurt to attempt to start it for any listener. %% So, it's normal (and harmless) that in most cases this call returns: {error, {already_started, pid()}} |