From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS3215 2.6.0.0/16 X-Spam-Status: No, score=-4.3 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id E975E1F8C6 for ; Wed, 8 Sep 2021 02:56:06 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E8E0838515E6 for ; Wed, 8 Sep 2021 02:56:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E8E0838515E6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1631069765; 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=S3pUqpHX+MlwyUkwD7qwv7AhYo7u9JIH379zzCl5OwoSKJ1a2zMMv+IXypX3CN830 CznBsn5vGHRJ6SPtjo/iVPUo0gMMjUUkm1VzdZnGp+35e1ZchG4PCFN4+6PWeRhl/d ITKD3kH3iw+nTDwvAXQehEbdB1Eal22bRkG6zGcQ= 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 Content-Transfer-Encoding: quoted-printable 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-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: , From: Malte Skarupke via Libc-alpha Reply-To: Malte Skarupke Cc: Malte Skarupke , triegel@redhat.com, malteskarupke@fastmail.fm Errors-To: libc-alpha-bounces+e=80x24.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. =2D-- nptl/test-cond-printers.c | 56 +++++++++++++++++++++++++++++++++----- nptl/test-cond-printers.py | 5 ++++ 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/nptl/test-cond-printers.c b/nptl/test-cond-printers.c index 8eaba2bb41..6c19d3e725 100644 =2D-- 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 =3D FAIL; if (pthread_condattr_init (&attr) =3D=3D 0 - && test_status_destroyed (&condvar) =3D=3D PASS) + && test_status (&condvar) =3D=3D PASS) result =3D PASS; /* Else, one of the pthread_cond* functions failed. */ return result; } +static void * +wait (void *arg) +{ + test_state *state =3D (test_state *)arg; + void *result =3D PASS; + if (pthread_mutex_lock (state->mutex) !=3D 0) + result =3D (void *)FAIL; + *state->wait_thread_asleep =3D 1; + if (pthread_cond_signal (state->condvar) !=3D 0) + result =3D (void *)FAIL; + if (pthread_cond_wait (state->condvar, state->mutex) !=3D 0) + result =3D (void *)FAIL; + if (pthread_mutex_unlock (state->mutex) !=3D 0) + result =3D (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 =3D FAIL; + int result =3D PASS; - if (pthread_cond_init (condvar, NULL) =3D=3D 0 - && pthread_cond_destroy (condvar) =3D=3D 0) - result =3D PASS; /* Test status (destroyed). */ + pthread_mutex_t mutex; + result |=3D pthread_mutex_init (&mutex, NULL); + result |=3D pthread_cond_init (condvar, NULL); + int wait_thread_asleep =3D 0; + test_state state =3D { &mutex, condvar, &wait_thread_asleep }; + result |=3D pthread_mutex_lock (&mutex); + pthread_t thread; + result |=3D pthread_create (&thread, NULL, wait, &state); + while (!wait_thread_asleep) + { + result |=3D pthread_cond_wait (condvar, &mutex); + } + result |=3D pthread_cond_signal (condvar); /* Test about to signal */ + result |=3D pthread_mutex_unlock (&mutex); + result |=3D pthread_cond_destroy (condvar); + void *retval =3D NULL; + result |=3D pthread_join (thread, &retval); /* Test status (destroyed)= . */ + result |=3D pthread_mutex_destroy (&mutex); + result =3D result ? FAIL : PASS; + if (retval !=3D NULL) + result =3D FAIL; return result; } diff --git a/nptl/test-cond-printers.py b/nptl/test-cond-printers.py index cb76a584e1..635f468e11 100644 =2D-- a/nptl/test-cond-printers.py +++ b/nptl/test-cond-printers.py @@ -33,6 +33,11 @@ try: var =3D 'condvar' to_string =3D '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'}) =2D- 2.25.1