diff options
| -rw-r--r-- | src/rabbit_prelaunch.erl | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/rabbit_prelaunch.erl b/src/rabbit_prelaunch.erl index 8beff019ff..50444dc49d 100644 --- a/src/rabbit_prelaunch.erl +++ b/src/rabbit_prelaunch.erl @@ -22,6 +22,7 @@ -define(BaseApps, [rabbit]). -define(ERROR_CODE, 1). +-define(EPMD_TIMEOUT, 30000). %%---------------------------------------------------------------------------- %% Specs @@ -245,7 +246,7 @@ duplicate_node_check([]) -> duplicate_node_check(NodeStr) -> Node = rabbit_misc:makenode(NodeStr), {NodeName, NodeHost} = rabbit_misc:nodeparts(Node), - case net_adm:names(NodeHost) of + case names(NodeHost) of {ok, NamePorts} -> case proplists:is_defined(NodeName, NamePorts) of true -> io:format("node with name ~p " @@ -261,6 +262,7 @@ duplicate_node_check(NodeStr) -> [NodeHost, EpmdReason, case EpmdReason of address -> "unable to establish tcp connection"; + timeout -> "timed out establishing tcp connection"; _ -> inet:format_error(EpmdReason) end]) end. @@ -277,3 +279,15 @@ terminate(Status) -> after infinity -> ok end end. + +names(Hostname) -> + Self = self(), + process_flag(trap_exit, true), + Pid = spawn_link(fun () -> Self ! {names, net_adm:names(Hostname)} end), + timer:exit_after(?EPMD_TIMEOUT, Pid, timeout), + Res = receive + {names, Names} -> Names; + {'EXIT', Pid, Reason} -> {error, Reason} + end, + process_flag(trap_exit, false), + Res. |
