diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2013-05-15 18:46:56 +1000 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2013-05-15 18:46:56 +1000 |
commit | 16cd93d587a21921cc187f2736a5fb9ea4227b12 (patch) | |
tree | 1fe52ec6bd99a20c13ffe43104123a8ee89154a4 | |
parent | Reflect applications name change (diff) |
Improve applications startup
-rw-r--r-- | src/ejabberd.erl | 27 | ||||
-rw-r--r-- | src/ejabberd_app.erl | 16 | ||||
-rw-r--r-- | src/ejabberd_auth_pam.erl | 6 | ||||
-rw-r--r-- | src/ejabberd_listener.erl | 2 | ||||
-rw-r--r-- | src/ejabberd_odbc.erl | 2 | ||||
-rw-r--r-- | src/ejabberd_riak_sup.erl | 1 | ||||
-rw-r--r-- | src/http_p1.erl | 8 | ||||
-rw-r--r-- | src/mod_bosh.erl | 4 | ||||
-rw-r--r-- | src/mod_irc.erl | 2 |
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 |