diff options
| -rw-r--r-- | src/rabbit.erl | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl index 5f727a823a..ce1205707c 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -201,14 +201,14 @@ prepare() -> start() -> try ok = prepare(), - ok = rabbit_misc:start_applications(?APPS) + ok = rabbit_misc:start_applications(application_load_order()) after %%give the error loggers some time to catch up timer:sleep(100) end. stop() -> - ok = rabbit_misc:stop_applications(?APPS). + ok = rabbit_misc:stop_applications(application_load_order()). stop_and_halt() -> init:stop(), @@ -386,6 +386,24 @@ config_files() -> %%--------------------------------------------------------------------------- +application_load_order() -> + {ok, G} = rabbit_misc:build_acyclic_graph( + fun application_graph_vertex/2, fun application_graph_edge/2, + [{App, Deps} || + {App, _Desc, _Vsn} <- application:loaded_applications(), + {ok, Deps} <- [application:get_key(App, applications)]]), + true = digraph:del_vertices( + G, digraph:vertices(G) -- digraph_utils:reachable(?APPS, G)), + digraph_utils:topsort(G). + +application_graph_vertex(App, _Deps) -> + [{App, App}]. + +application_graph_edge(App, Deps) -> + [{Dep, App} || Dep <- Deps]. + +%%--------------------------------------------------------------------------- + print_banner() -> {ok, Product} = application:get_key(id), {ok, Version} = application:get_key(vsn), |
