couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Filipe David Manana <fdman...@gmail.com>
Subject Re: git commit: COUCHDB-1424 Fix etap to not consume any message
Date Wed, 31 Oct 2012 15:35:17 GMT
On Wed, Oct 31, 2012 at 4:32 PM, Paul Davis <paul.joseph.davis@gmail.com> wrote:
> Nice find

Say thanks to Damien :)
Fixed in an older etap version, I just ported it to latest etap.

Robert (Dionne), wanna test this to see if it fixes the hangs you used
to have with OTP R15Bx?
thanks

>
> 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},
>>



-- 
Filipe David Manana,

"Reasonable men adapt themselves to the world.
 Unreasonable men adapt the world to themselves.
 That's why all progress depends on unreasonable men."

Mime
View raw message