summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit.erl25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 0d163944..5ec0611a 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -390,7 +390,32 @@ config_files() ->
%%---------------------------------------------------------------------------
+load_applications() ->
+ load_applications(queue:from_list(?APPS), sets:new()).
+
+load_applications(Worklist, Loaded) ->
+ case queue:out(Worklist) of
+ {empty, _WorkList} ->
+ ok;
+ {{value, App}, Worklist1} ->
+ case sets:is_element(App, Loaded) of
+ true -> load_applications(Worklist1, Loaded);
+ false -> case application:load(App) of
+ ok -> ok;
+ {error, {already_loaded, App}} -> ok;
+ Error -> throw(Error)
+ end,
+ load_applications(
+ case application:get_key(App, applications) of
+ undefined -> Worklist1;
+ {ok, Lst} -> queue:join(Worklist1,
+ queue:from_list(Lst))
+ end, sets:add_element(App, Loaded))
+ end
+ end.
+
application_load_order() ->
+ ok = load_applications(),
{ok, G} = rabbit_misc:build_acyclic_graph(
fun application_graph_vertex/2, fun application_graph_edge/2,
[{App, case application:get_key(App, applications) of