diff options
Diffstat (limited to 'src/rabbit.erl')
| -rw-r--r-- | src/rabbit.erl | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl index ba84f97610..b5d211e535 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -19,7 +19,7 @@ -behaviour(application). -export([start/0, boot/0, stop/0, - stop_and_halt/0, await_startup/0, status/0, is_running/0, + stop_and_halt/0, await_startup/0, await_startup2/0, status/0, is_running/0, is_running/1, environment/0, rotate_logs/1, force_event_refresh/1, start_fhc/0]). -export([start/2, stop/1]). @@ -436,7 +436,7 @@ stop() -> undefined -> ok; _ -> rabbit_log:info("RabbitMQ hasn't finished starting yet. Waiting for startup to finish before stopping..."), - await_startup(true) + wait_to_finish_booting() end, rabbit_log:info("RabbitMQ is asked to stop...~n", []), Apps = ?APPS ++ rabbit_plugins:active(), @@ -619,6 +619,35 @@ await_startup(HaveSeenRabbitBoot) -> await_startup(true) end. +await_startup2() -> + case is_booting() of + true -> wait_to_finish_booting(); + false -> + case is_running() of + true -> ok; + false -> wait_to_start_booting(), + wait_to_finish_booting() + end + end. + +is_booting() -> + whereis(rabbit_boot) /= undefined. + +wait_to_start_booting() -> + case whereis(rabbit_boot) of + undefined -> timer:sleep(100), + wait_to_start_booting(); + _ -> ok + end. + +wait_to_finish_booting() -> + case whereis(rabbit_boot) of + undefined -> true = is_running(), + ok; + _ -> timer:sleep(100), + wait_to_finish_booting() + end. + status() -> S1 = [{pid, list_to_integer(os:getpid())}, %% The timeout value used is twice that of gen_server:call/2. |
