aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2009-02-13 23:52:24 +0000
committerBadlop <badlop@process-one.net>2009-02-13 23:52:24 +0000
commit70e431787e16ecf7cc090056efd61a3e156b9e75 (patch)
treeab6b876b9769b4ea46e4d523aef1b72aa346f91b
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--ChangeLog5
-rw-r--r--src/ejabberd_listener.erl23
2 files changed, 26 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index f2dc68eb2..358cdd937 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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()}}