couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul Davis <paul.joseph.da...@gmail.com>
Subject Re: git commit: COUCHDB-1424 Fix etap to not consume any message
Date Wed, 31 Oct 2012 15:32:24 GMT
Nice find

On Wed, Oct 31, 2012 at 11:29 AM,  <fdmanana@apache.org> wrote:
> Updated Branches:
>   refs/heads/1424-fix-etap-consuming-any-test-message [created] 67d531b02
>
>
> COUCHDB-1424 Fix etap to not consume any message
>
> Turns out that etap consumes any message in the mailbox in
> some cases. This can make some tests that use message passing
> hang, as etap itself consumes the messages.
>
>
> Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
> Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/67d531b0
> Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/67d531b0
> Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/67d531b0
>
> Branch: refs/heads/1424-fix-etap-consuming-any-test-message
> Commit: 67d531b028503b316c9ff8842b8fb34ea75db29d
> Parents: 8ccf696
> Author: Filipe David Borba Manana <fdmanana@apache.org>
> Authored: Wed Oct 31 16:19:48 2012 +0100
> Committer: Filipe David Borba Manana <fdmanana@apache.org>
> Committed: Wed Oct 31 16:19:48 2012 +0100
>
> ----------------------------------------------------------------------
>  src/etap/etap.erl |   21 +++++++++++----------
>  1 files changed, 11 insertions(+), 10 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/couchdb/blob/67d531b0/src/etap/etap.erl
> ----------------------------------------------------------------------
> diff --git a/src/etap/etap.erl b/src/etap/etap.erl
> index 7380013..ae3896c 100644
> --- a/src/etap/etap.erl
> +++ b/src/etap/etap.erl
> @@ -120,14 +120,14 @@ plan(N) when is_integer(N), N > 0 ->
>  %% @doc End the current test plan and output test results.
>  %% @todo This should probably be done in the test_server process.
>  end_tests() ->
> -    timer:sleep(100),
> +    Ref = make_ref(),
>      case whereis(etap_server) of
> -        undefined -> self() ! true;
> -        _ -> etap_server ! {self(), state}
> +        undefined -> self() ! {Ref, true};
> +        _ -> etap_server ! {self(), state, Ref}
>      end,
> -    State = receive X -> X end,
> +    State = receive {Ref, X} -> X end,
>      if
> -        State#test_state.planned == -1 ->
> +        is_record(State, test_state) andalso State#test_state.planned == -1 ->
>              io:format("1..~p~n", [State#test_state.count]);
>          true ->
>              ok
> @@ -564,8 +564,8 @@ test_server(State) ->
>                  count = State#test_state.count + 1,
>                  fail = State#test_state.fail + 1
>              };
> -        {From, state} ->
> -            From ! State,
> +        {From, state, Ref} ->
> +            From ! {Ref, State},
>              State;
>          {_From, diag, Message} ->
>              io:format("~s~n", [Message]),
> @@ -573,8 +573,8 @@ test_server(State) ->
>          {From, count} ->
>              From ! State#test_state.count,
>              State;
> -        {From, is_skip} ->
> -            From ! State#test_state.skip,
> +        {From, is_skip, Ref} ->
> +            From ! {Ref, State#test_state.skip},
>              State;
>          done ->
>              exit(normal)
> @@ -584,7 +584,8 @@ test_server(State) ->
>  %% @private
>  %% @doc Process the result of a test and send it to the etap_server process.
>  mk_tap(Result, Desc) ->
> -    IsSkip = lib:sendw(etap_server, is_skip),
> +    etap_server ! {self(), is_skip, Ref = make_ref()} ,
> +    receive {Ref, IsSkip} -> ok end,
>      case [IsSkip, Result] of
>          [_, true] ->
>              etap_server ! {self(), pass, Desc},
>

Mime
View raw message