Return-Path: X-Original-To: apmail-couchdb-commits-archive@www.apache.org Delivered-To: apmail-couchdb-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9EC6BDA02 for ; Wed, 31 Oct 2012 15:29:15 +0000 (UTC) Received: (qmail 79248 invoked by uid 500); 31 Oct 2012 15:29:15 -0000 Delivered-To: apmail-couchdb-commits-archive@couchdb.apache.org Received: (qmail 79068 invoked by uid 500); 31 Oct 2012 15:29:15 -0000 Mailing-List: contact commits-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@couchdb.apache.org Delivered-To: mailing list commits@couchdb.apache.org Received: (qmail 78699 invoked by uid 99); 31 Oct 2012 15:29:14 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 31 Oct 2012 15:29:14 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 2C9625114E; Wed, 31 Oct 2012 15:29:14 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: fdmanana@apache.org To: commits@couchdb.apache.org X-Mailer: ASF-Git Admin Mailer Subject: git commit: COUCHDB-1424 Fix etap to not consume any message Message-Id: <20121031152914.2C9625114E@tyr.zones.apache.org> Date: Wed, 31 Oct 2012 15:29:14 +0000 (UTC) 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 Authored: Wed Oct 31 16:19:48 2012 +0100 Committer: Filipe David Borba Manana 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},