From patchwork Sat Jan 16 20:49:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Malte Skarupke X-Patchwork-Id: 41733 X-Patchwork-Delegate: carlos@redhat.com 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 1CDA1388A415; Sat, 16 Jan 2021 20:50:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1CDA1388A415 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1610830212; bh=E321S/0aoNcPhBOSMNsOMKD1Vxaw7sBSkj5sChGR8Qo=; 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=fRCIMpnEvpiWYr8Vztjmsza2mHIHx3fAai2LBdT7LYFqHNle9K+FUgR/ph9GWuQul 9awTyNHk/6UmJ2obi1+DoKUx2AJwW2JI/Q/QxZ4Fuo0GF2yORsM3TSZogZLev7YTuh zdv/ayH9XqlrIVTuGjazdxWoFZYriJ42a4DnOw88= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mout.web.de (mout.web.de [217.72.192.78]) by sourceware.org (Postfix) with ESMTPS id F16673846047 for ; Sat, 16 Jan 2021 20:50:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org F16673846047 X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from auth1-smtp.messagingengine.com ([66.111.4.227]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MPpQU-1l4iGh0Z2A-0050Dc; Sat, 16 Jan 2021 21:50:01 +0100 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailauth.nyi.internal (Postfix) with ESMTP id AFB1D27C005C; Sat, 16 Jan 2021 15:49:57 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Sat, 16 Jan 2021 15:49:57 -0500 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrtdeggddugeehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkofgjfhestddtredtre dttdenucfhrhhomhepofgrlhhtvgcuufhkrghruhhpkhgvuceomhgrlhhtvghskhgrrhhu phhkvgesfigvsgdruggvqeenucggtffrrghtthgvrhhnpeduffeufedtudehhfffieejfe ehfeefledvffffffehhfefffelffeiudelteehfeenucfkphepieejrddvheegrdduieeh rdelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmh grlhhtvghskhgrrhhuphhkvgdomhgvshhmthhprghuthhhphgvrhhsohhnrghlihhthidq uddtudejtdefvdeliedqudduvdegvdekieelqdhmrghlthgvshhkrghruhhpkhgvpeepfi gvsgdruggvsehfrghsthhmrghilhdrfhhm X-ME-Proxy: Received: from localhost.localdomain (unknown [67.254.165.9]) by mail.messagingengine.com (Postfix) with ESMTPA id 6F9721080063; Sat, 16 Jan 2021 15:49:57 -0500 (EST) To: libc-alpha@sourceware.org Subject: [PATCH 4/5] nptl: Make test-cond-printers check the number of waiters Date: Sat, 16 Jan 2021 15:49:49 -0500 Message-Id: <20210116204950.16434-4-malteskarupke@web.de> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210116204950.16434-1-malteskarupke@web.de> References: <20210116204950.16434-1-malteskarupke@web.de> X-Provags-ID: V03:K1:gYQ89p9IEjK3rNkXkSrhp1CrNq3buw4p8tXa6We9DJRRNL1HtKj aax5ao/HnUAr5AFljusEjXbviVX4cKKBVKJ6H0McuVkLdVav/fv8bvgwDcYxYO3GwcfjHbT IEdAepJ+itqDDBGnQHnKkhMvrZtzv8Fk4Egku/jbSvAQMdzlR63VPDFdpFnWb3a1DSQ14kE Yd/jTPECF8u94JDgalFkw== X-UI-Out-Filterresults: notjunk:1;V03:K0:iU/YpsxAwPE=:nzq4z+pVgJKxZm7wazMPp+ DtsCeaA7wmaq5F1FKOngl+wz40rzV623LTkp/5S0WiJlbQQ5KAk3P6Ue9X48jBRFN7B6xMT1g RBsOpMNRh2JAS9VCdZiKb+OiUvHzdin2lj4uhFAz4T3E11wFGVlQA5kQhs1dmoBtsrHaU4EzS kLofiqShIz7Q047y0m/+6B7kHQUeo5xyy/HSwsNX8hqUBdmK16LPmB+JYG5ZmnGnb1yp/Xp0z 7XaRqxC6VC4x5JmcBfvN+o7LS3oji6u4CDd1WFmAygnEmD3pnZgqAcjbVNDBfOB2uH4gmbrDh 5nKh/DS7ze+dZ3zm2vdkjmi/wlNZH5Mp/YHgo47bwsVDuq7GNgWodCRGab2VrrZftp7Lq708f LV+8RVG1Hp2marjy6YUVsMzd8Vg3L5zE2e8CapTs37Bc+mx9SIH3CUcQNeGW9NuIsbtgt5Xam RAuhsvWRj4b8RFXDTMaF7EslB7OZBXvXJQ6tnqhpnEWOAmJOLcQMDIQlg8fbKnvxVUR2d1egT KROokwU/+0DtuglQlGKj/VedbKutNKXJx/yRUBFwbvkcTsMOrVIpr6rZZI0X+f3Wh3jFzb5p8 T7UVadeU5lx5pE7viUH8AdWYg+fI63lWfzvjOqFpL6lIeyDgwnwGqeQmr1rAYIQ0gpFPcarB2 jUrpI1TMTRWWlC5rRgUnMB0pX0srII4iahd/uGHBGhVGc/NKy4izzRIbkX26p5VXS9BOkGfBh 88ciPT8xg1/ivy93IsolpV/eDk3yKHl1DD0tFamBeIFBl2mqo7BtRZY0Cjvg3PNWn4xK+LLdG 3RyiQc5rpv6K1RKmWCUoO+ip7dSrrJ2Gv5oEC23p+/pKtRO/zBBPglTWzO2p4ECV42BY0snFP nrFF3htINGe14V1ALzpw== X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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@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.17.1 diff --git a/nptl/test-cond-printers.c b/nptl/test-cond-printers.c index 4b6db831f9..603a7cccee 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 38e2da4269..ab12218802 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'})