diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl index bb05597..a3c8b9b 100644 --- a/src/rebar_utils.erl +++ b/src/rebar_utils.erl @@ -293,14 +293,23 @@ deprecated(Old, New, When) -> -spec delayed_halt(integer()) -> no_return(). delayed_halt(Code) -> - case os:type() of - {win32, nt} -> - timer:sleep(100), + %% Work around buffer flushing issue in erlang:halt if OTP older + %% than R15B01. + %% TODO: remove workaround once we require R15B01 or newer + %% R15B01 introduced erlang:halt/2 + case erlang:is_builtin(erlang, halt, 2) of + true -> halt(Code); - _ -> - halt(Code), - %% workaround to delay exit until all output is written - receive after infinity -> ok end + false -> + case os:type() of + {win32, nt} -> + timer:sleep(100), + halt(Code); + _ -> + halt(Code), + %% workaround to delay exit until all output is written + receive after infinity -> ok end + end end. %% ====================================================================