From patchwork Wed Sep 8 02:52:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Malte Skarupke X-Patchwork-Id: 44899 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 05D5F38515F1 for ; Wed, 8 Sep 2021 02:56:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 05D5F38515F1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1631069768; bh=NEAxP2Bog1u7V10l+0x39gHVwqG0dyFfAOevhW/4vtQ=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=EinAQ30XO4e8R/Ajf+ZBj6eeGfaS1Azcfn0R4/PyLo49GzCvVIfLu1OqiQPK+yxi3 kJ17pb/XQjHeDsECks36ovRtuaEMOrKEi0v22EYQ/0FGB+6Z+qXOkzF7WtjbkCKYJE gqSRJNTjefHHrhTgI5TE5E5YI2pEmD2HXMtMX5KU= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mout.web.de (mout.web.de [212.227.17.11]) by sourceware.org (Postfix) with ESMTPS id 2F6DD385C412 for ; Wed, 8 Sep 2021 02:54:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2F6DD385C412 X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from auth2-smtp.messagingengine.com ([66.111.4.228]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0Meje0-1mYtWK0jNI-00OCfO; Wed, 08 Sep 2021 04:54:16 +0200 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailauth.nyi.internal (Postfix) with ESMTP id E771527C0060; Tue, 7 Sep 2021 22:54:14 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Tue, 07 Sep 2021 22:54:14 -0400 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrudefiedgiedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkofgjfhgggfestdekre dtredttdenucfhrhhomhepofgrlhhtvgcuufhkrghruhhpkhgvuceomhgrlhhtvghskhgr rhhuphhkvgesfigvsgdruggvqeenucggtffrrghtthgvrhhnpeevgfehffefffehleelie fftddvudffkedtkeduheeiueeugffgvdejgeduvdfgjeenucevlhhushhtvghrufhiiigv pedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehmrghlthgvshhkrghruhhpkhgvodhmvg hsmhhtphgruhhthhhpvghrshhonhgrlhhithihqddutddujedtfedvleeiqdduuddvgedv keeiledqmhgrlhhtvghskhgrrhhuphhkvgeppeifvggsrdguvgesfhgrshhtmhgrihhlrd hfmh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 7 Sep 2021 22:54:14 -0400 (EDT) To: libc-alpha@sourceware.org Subject: [PATCH v2 4/6] nptl: Make test-cond-printers check the number of waiters Date: Tue, 7 Sep 2021 22:52:37 -0400 Message-Id: <20210908025239.1326480-5-malteskarupke@web.de> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210908025239.1326480-1-malteskarupke@web.de> References: <20210908025239.1326480-1-malteskarupke@web.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:hCd2bAXuirey1CXzkyM8G4k5plFokaRDIEAuxWzqO8fmnJPBxqs H9nWjWuz3pjHl3cX8C9je5CxecMOKlb6gpnO+Br1jgbur7XRz+u18JiK0utZnHHqjz7LGzJ 9hIxyXKrWYAB931PC9nE5uin9CmJIdnGEIhM62Cb+vqVL7VJ0uVuiXIXJntEszsCP8YK54p vgFOHqQo8dos6TNC9Xy3Q== X-UI-Out-Filterresults: notjunk:1;V03:K0:4YoaCjh7Jws=:AYhcIHSroyFe9X8IFMohSB 9zJNQL2kHfXK4lky43sfwBDRdL7K9Tgb/OcgK6LEeoWpSkjtiPkBpPunnh6XWRH8020toIzbp GVrYiEAATMDR3ZL7zTZ7YeoTf4iFA9mC7N0fd+fXGRHMeTMlPQe6GF2XlEVwXsueUSTBn1KIt QP48JNRP+bu/tDJSl8MKG9/hCV2y3mePYCt7kuZmg7UP2kGbVpBWWuiGIcNzz4Yk+Cqa7KNUH yd03ppaVOSnNrOhfW9toEwpDuNRox6cynZ4VFA+mWfP7bW71SGDuqBUyO3TkjiM8VCJ7FRGsX /9CW+LcDEjQnvWBwYaH1u6NRXt4XZAs2DVU9V0FQ2rPywu5pQUwJ4q3OTzpprUnvmHwqBAz1j HgOtRSXWZfE/RAymPne0FD4v396n5iKo8M0ppWNReGEaOqisaaErZ2gmS22Ao+x6zQib1Z3j0 D0QPYrxMcfWyyYjsSGWGqMNg+91NxV2jRmkzzsWt4NSc2/SM3sOuMJQpJKeuIGFebNnzST37H T01eryc8EDWOlnHoGyeFEPW1xhLcCOWybI9z/oxXckMjeJ/mAYYBzsotViv/VrW9i8JJPiqIJ HMkvRzO3qfdEXbaF5RcYsDpxZB8Lhm/a//x8v+fcnU4rYI4sJQBISzriYCI+a7ZHQoPvcKzrI jzH0XD8as9hYjsEvzbGfftBHvhi9dsii3VWfWHz4bnKOLvluokgokP2bZ1GXqG3PKYpzQfIua zjgymq6tVhzweExdmWvJ6hvEvQxoUfmxAk90cKENABcE4UH3+LhSlTDvEmfEFDQJx6uVx4afE Sm2ZWFyliVqSVlcCJzttFyiyqY+BwolzW8hOi0XLmDiRKXLtITanTWnhZ+a5Km/hhYO545183 6bW99t3jfPcKluQuuD8bg23St/71cEORSKnC6R7TcRm01eLAurGFm1p2YDvdkWqN7whGTJpi0 +XsGsXsgbpXl5PFfQvPjhLIlf3Ha/djk0Yo34QbGQ++OacDWNiKHv2rhT67q7kJwsjK2IQ/92 ALbuzn5UyLQIDe/D7bfuEVrDcZx/nJw0mhK2wqc6n8FGT2q8Hf08XUu85OXeA12cc0pH8G3Ge qp/ZSA+GJzSKrY= X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Malte Skarupke via Libc-alpha From: Malte Skarupke Reply-To: Malte Skarupke Cc: Malte Skarupke , triegel@redhat.com, malteskarupke@fastmail.fm Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" In my last change I changed the semantics of how to determine the number of waiters on a condition variable. The existing test only tested that the printers print something. They didn't cover the case when there is a thread sleeping on the condition variable. In this patch I changed the test to ensure that the correct number is printed. This is just to double-check the changes from my previous patch. --- nptl/test-cond-printers.c | 56 +++++++++++++++++++++++++++++++++----- nptl/test-cond-printers.py | 5 ++++ 2 files changed, 54 insertions(+), 7 deletions(-) -- 2.25.1 diff --git a/nptl/test-cond-printers.c b/nptl/test-cond-printers.c index 8eaba2bb41..6c19d3e725 100644 --- a/nptl/test-cond-printers.c +++ b/nptl/test-cond-printers.c @@ -26,7 +26,14 @@ #define PASS 0 #define FAIL 1 -static int test_status_destroyed (pthread_cond_t *condvar); +static int test_status (pthread_cond_t *condvar); + +typedef struct +{ + pthread_mutex_t *mutex; + pthread_cond_t *condvar; + int *wait_thread_asleep; +} test_state; int main (void) @@ -36,22 +43,57 @@ main (void) int result = FAIL; if (pthread_condattr_init (&attr) == 0 - && test_status_destroyed (&condvar) == PASS) + && test_status (&condvar) == PASS) result = PASS; /* Else, one of the pthread_cond* functions failed. */ return result; } +static void * +wait (void *arg) +{ + test_state *state = (test_state *)arg; + void *result = PASS; + if (pthread_mutex_lock (state->mutex) != 0) + result = (void *)FAIL; + *state->wait_thread_asleep = 1; + if (pthread_cond_signal (state->condvar) != 0) + result = (void *)FAIL; + if (pthread_cond_wait (state->condvar, state->mutex) != 0) + result = (void *)FAIL; + if (pthread_mutex_unlock (state->mutex) != 0) + result = (void *)FAIL; + return result; +} + /* Initializes CONDVAR, then destroys it. */ static int -test_status_destroyed (pthread_cond_t *condvar) +test_status (pthread_cond_t *condvar) { - int result = FAIL; + int result = PASS; - if (pthread_cond_init (condvar, NULL) == 0 - && pthread_cond_destroy (condvar) == 0) - result = PASS; /* Test status (destroyed). */ + pthread_mutex_t mutex; + result |= pthread_mutex_init (&mutex, NULL); + result |= pthread_cond_init (condvar, NULL); + int wait_thread_asleep = 0; + test_state state = { &mutex, condvar, &wait_thread_asleep }; + result |= pthread_mutex_lock (&mutex); + pthread_t thread; + result |= pthread_create (&thread, NULL, wait, &state); + while (!wait_thread_asleep) + { + result |= pthread_cond_wait (condvar, &mutex); + } + result |= pthread_cond_signal (condvar); /* Test about to signal */ + result |= pthread_mutex_unlock (&mutex); + result |= pthread_cond_destroy (condvar); + void *retval = NULL; + result |= pthread_join (thread, &retval); /* Test status (destroyed). */ + result |= pthread_mutex_destroy (&mutex); + result = result ? FAIL : PASS; + if (retval != NULL) + result = FAIL; return result; } diff --git a/nptl/test-cond-printers.py b/nptl/test-cond-printers.py index cb76a584e1..635f468e11 100644 --- a/nptl/test-cond-printers.py +++ b/nptl/test-cond-printers.py @@ -33,6 +33,11 @@ try: var = 'condvar' to_string = 'pthread_cond_t' + break_at(test_source, 'Test about to signal') + continue_cmd() # Go to test_status_destroyed + test_printer(var, to_string, {'Threads known to still execute a wait function': '1'}) + + break_at(test_source, 'Test status (destroyed)') continue_cmd() # Go to test_status_destroyed test_printer(var, to_string, {'Threads known to still execute a wait function': '0'})