On Wed, Oct 31, 2012 at 4:32 PM, Paul Davis <[email protected]> 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, <[email protected]> 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 <[email protected]> >> Authored: Wed Oct 31 16:19:48 2012 +0100 >> Committer: Filipe David Borba Manana <[email protected]> >> 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."
