aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-05-15 18:46:56 +1000
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-05-15 18:46:56 +1000
commit16cd93d587a21921cc187f2736a5fb9ea4227b12 (patch)
tree1fe52ec6bd99a20c13ffe43104123a8ee89154a4
parentReflect applications name change (diff)
Improve applications startup
-rw-r--r--src/ejabberd.erl27
-rw-r--r--src/ejabberd_app.erl16
-rw-r--r--src/ejabberd_auth_pam.erl6
-rw-r--r--src/ejabberd_listener.erl2
-rw-r--r--src/ejabberd_odbc.erl2
-rw-r--r--src/ejabberd_riak_sup.erl1
-rw-r--r--src/http_p1.erl8
-rw-r--r--src/mod_bosh.erl4
-rw-r--r--src/mod_irc.erl2
9 files changed, 43 insertions, 25 deletions
diff --git a/src/ejabberd.erl b/src/ejabberd.erl
index 02b24e5a2..7b83f19a1 100644
--- a/src/ejabberd.erl
+++ b/src/ejabberd.erl
@@ -27,7 +27,7 @@
-module(ejabberd).
-author('alexey@process-one.net').
--export([start/0, stop/0,
+-export([start/0, stop/0, start_app/1,
get_pid_file/0]).
-include("logger.hrl").
@@ -50,3 +50,28 @@ get_pid_file() ->
Path ->
Path
end.
+
+start_app(App) when not is_list(App) ->
+ start_app([App]);
+start_app([App|Apps]) ->
+ case application:start(App) of
+ ok ->
+ start_app(Apps);
+ {error, {already_started, _}} ->
+ start_app(Apps);
+ {error, {not_started, DepApp}} ->
+ case lists:member(DepApp, [App|Apps]) of
+ true ->
+ ?CRITICAL_MSG("failed to start application '~p': "
+ "circular dependency on '~p' detected",
+ [App, DepApp]),
+ erlang:error(application_start_failed);
+ false ->
+ start_app([DepApp,App|Apps])
+ end;
+ Err ->
+ ?CRITICAL_MSG("failed to start application '~p': ~p", [App, Err]),
+ erlang:error(application_start_failed)
+ end;
+start_app([]) ->
+ ok.
diff --git a/src/ejabberd_app.erl b/src/ejabberd_app.erl
index 2732e7c43..4db7307e5 100644
--- a/src/ejabberd_app.erl
+++ b/src/ejabberd_app.erl
@@ -241,12 +241,10 @@ delete_pid_file() ->
end.
start_apps() ->
- application:start(sasl),
- application:start(crypto),
- application:start(public_key),
- application:start(ssl),
- application:start(p1_tls),
- application:start(p1_xml),
- application:start(p1_stringprep),
- application:start(p1_zlib),
- application:start(p1_cache_tab).
+ ejabberd:start_app(sasl),
+ ejabberd:start_app(ssl),
+ ejabberd:start_app(p1_tls),
+ ejabberd:start_app(p1_xml),
+ ejabberd:start_app(p1_stringprep),
+ ejabberd:start_app(p1_zlib),
+ ejabberd:start_app(p1_cache_tab).
diff --git a/src/ejabberd_auth_pam.erl b/src/ejabberd_auth_pam.erl
index 8413faaae..b6747a52c 100644
--- a/src/ejabberd_auth_pam.erl
+++ b/src/ejabberd_auth_pam.erl
@@ -40,11 +40,7 @@
plain_password_required/0]).
start(_Host) ->
- case application:start(p1_pam) of
- {ok, _} -> ok;
- {error, {already_started, _}} -> ok;
- Err -> Err
- end.
+ ejabberd:start_app(p1_pam).
set_password(_User, _Server, _Password) ->
{error, not_allowed}.
diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl
index b675785e6..fefb5591c 100644
--- a/src/ejabberd_listener.erl
+++ b/src/ejabberd_listener.erl
@@ -624,7 +624,7 @@ prepare_ip(IP) when is_binary(IP) ->
prepare_mod(ejabberd_stun) ->
prepare_mod(stun);
prepare_mod(stun) ->
- application:start(p1_stun),
+ ejabberd:start_app(p1_stun),
stun;
prepare_mod(Mod) ->
Mod.
diff --git a/src/ejabberd_odbc.erl b/src/ejabberd_odbc.erl
index 194dd9eba..1308e8665 100644
--- a/src/ejabberd_odbc.erl
+++ b/src/ejabberd_odbc.erl
@@ -463,7 +463,7 @@ abort_on_driver_error(Reply, From) ->
%% == pure ODBC code
odbc_connect(SQLServer) ->
- application:start(odbc),
+ ejabberd:start_app(odbc),
odbc:connect(SQLServer, [{scrollable_cursors, off}]).
%% == Native PostgreSQL code
diff --git a/src/ejabberd_riak_sup.erl b/src/ejabberd_riak_sup.erl
index fbb4b5689..5f27e0a7f 100644
--- a/src/ejabberd_riak_sup.erl
+++ b/src/ejabberd_riak_sup.erl
@@ -55,6 +55,7 @@ start() ->
riak_server, fun(_) -> true end, false),
if
StartRiak ->
+ ejabberd:start_app(riakc),
do_start();
true ->
ok
diff --git a/src/http_p1.erl b/src/http_p1.erl
index 497375581..343a0bf46 100644
--- a/src/http_p1.erl
+++ b/src/http_p1.erl
@@ -39,7 +39,7 @@
-ifdef(USE_IBROWSE).
start() ->
- application:start(ibrowse).
+ ejabberd:start_app(ibrowse).
stop() ->
application:stop(ibrowse).
@@ -61,7 +61,7 @@ request(Method, URL, Hdrs, Body, Opts) ->
-ifdef(USE_LHTTPC).
start() ->
- application:start(lhttpc).
+ ejabberd:start_app(lhttpc).
stop() ->
application:stop(lhttpc).
@@ -82,10 +82,10 @@ request(Method, URL, Hdrs, Body, Opts) ->
-else.
start() ->
- application:start(inets).
+ ejabberd:start_app(inets).
stop() ->
- application:start(inets).
+ ejabberd:start_app(inets).
to_list(Str) when is_binary(Str) ->
binary_to_list(Str);
diff --git a/src/mod_bosh.erl b/src/mod_bosh.erl
index c173f2416..85ce101a5 100644
--- a/src/mod_bosh.erl
+++ b/src/mod_bosh.erl
@@ -186,11 +186,9 @@ start_jiffy(Opts) ->
false ->
ok;
true ->
- case application:start(jiffy) of
+ case catch ejabberd:start_app(jiffy) of
ok ->
ok;
- {error, {already_started, _}} ->
- ok;
Err ->
?WARNING_MSG("Failed to start JSON codec (jiffy): ~p. "
"JSON support will be disabled", [Err])
diff --git a/src/mod_irc.erl b/src/mod_irc.erl
index 3a5f99844..ec9c68699 100644
--- a/src/mod_irc.erl
+++ b/src/mod_irc.erl
@@ -99,7 +99,7 @@ stop(Host) ->
%%====================================================================
init([Host, Opts]) ->
- application:start(p1_iconv),
+ ejabberd:start_app(p1_iconv),
MyHost = gen_mod:get_opt_host(Host, Opts,
<<"irc.@HOST@">>),
case gen_mod:db_type(Opts) of