diff options
Diffstat (limited to 'src')
| -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 | 
