From patchwork Mon Jul 7 12:11:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Dora, Sunil Kumar" X-Patchwork-Id: 115748 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 78C5D385840C for ; Mon, 7 Jul 2025 12:14:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 78C5D385840C X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mx0a-0064b401.pphosted.com (mx0a-0064b401.pphosted.com [205.220.166.238]) by sourceware.org (Postfix) with ESMTPS id 68DC83857BAF for ; Mon, 7 Jul 2025 12:11:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 68DC83857BAF Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=windriver.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=windriver.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 68DC83857BAF Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.166.238 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1751890312; cv=pass; b=gICwE9ZhzMGu+hYuEUs5VVUAbcxXIM4Q48qmlJlJrO64Elkbc5qENTcNXRqpY2C/m8UCt3GppNzQSlzYPDV5mWHexyLFvay+l3SaAazAVAynloJhMEyNOFTqEcXbAviSX2g/hmFCx/Xnwvwd28V1KebZ3nI2wux01ygg9IElUWo= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1751890312; c=relaxed/simple; bh=d+tPdZzYCZYaLVf09aqYg33PEz26zE9ngxQwKEkdIeU=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=YR1M9e30uV6Nj51iSyOnkVzSiZLgG6OqkRM3PvLST+WCSXCzvf7Ld4V8sxELi650Bj4QiYNygGsVEeGtmusgBFHqLZTi3bBjuB6d0MgF6mIS+HWylsf7APbvsbAP66OwHW3E+Y/dQxBfmMgHZmc3cnj6z0x7TQjfWTvXWCcUt2A= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 68DC83857BAF Received: from pps.filterd (m0250810.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5675mSZo003178; Mon, 7 Jul 2025 05:11:43 -0700 Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10on2049.outbound.protection.outlook.com [40.107.93.49]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 47pyb5hh5d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 07 Jul 2025 05:11:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yCoo/20fcNuvAeV33hl1cFRKKDAyyiFEcPvRCKOB1kgNaYIxxlFQpoIs+fTSlBYZencLdv7GIqvuTXMni0Vw9kk2J3JTIL0iFBqFGnpVHVS01/Ta368Oq5sXYviVv50aEroNKpytXN18C7roUdhi7x8aFjoIdA6PQc8fNyDUqvPJRaE0txf5MGVmaCXI7fGu61QReKQsGtwW99Dao9xLMXpepOD3qqPbDtI5LJWUXkfNhfLlB1QHcIOct9/YoQqwseIinmWTix4Ls9/QqmLw9uns/Gk7A8uxH/nwRRppUh+AF3nOqQhMMJlf2lv4qlgNcA/0GHfzqePSIM54OrUdvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=yB2UnXMLDTBMx/YRLL3bYWw9NJ412HCaeFaoGSLdbAc=; b=oibctIRPFcQJGFGaX51lEdpx9VUyvYFHZkd9t6nBSQgPLe+szGJuXSqgYpCM1XrWqLIU1pF0bPvf298/dBuILpY1om2Jihjq4eA5Degvwyt5jk7Loa7T6HQPGoaLLBJEYHnt+QwGnl418Zug/wa48R7zBGUNfpvnxU6lsIXwCGW7ag+vq9cgQKWj6tFi1wl/OM53YRvLgLRKtAMYGPMaJwp9fQ0bdc4eaV7QrsmzqI3AjTeXAWgLr78t32VEhRC5NK3PhFbBXWpUnkJ+Jr1rJikMivG0bPR2N1mRiWb1ws55SRr9TrsheEmmHYlq2CpL1ly5g/Im/gHwSn0qNY+LXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=windriver.com; dmarc=pass action=none header.from=windriver.com; dkim=pass header.d=windriver.com; arc=none Received: from DS0PR11MB7901.namprd11.prod.outlook.com (2603:10b6:8:f4::20) by PH0PR11MB5126.namprd11.prod.outlook.com (2603:10b6:510:3a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.24; Mon, 7 Jul 2025 12:11:40 +0000 Received: from DS0PR11MB7901.namprd11.prod.outlook.com ([fe80::9fa:eb3f:cf26:264d]) by DS0PR11MB7901.namprd11.prod.outlook.com ([fe80::9fa:eb3f:cf26:264d%4]) with mapi id 15.20.8901.023; Mon, 7 Jul 2025 12:11:40 +0000 From: sunilkumar.dora@windriver.com To: libc-alpha@sourceware.org Cc: carlos@redhat.com, SunilKumar.Dora@windriver.com, Sundeep.Kokkonda@windriver.com, fweimer@redhat.com, frankbarrus_sw@shaggy.cc, malteskarupke@fastmail.fm Subject: [PATCH 05/10] [2.37] nptl: Remove g_refs from condition variables Date: Mon, 7 Jul 2025 05:11:00 -0700 Message-ID: <20250707121105.2226766-6-sunilkumar.dora@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250707121105.2226766-1-sunilkumar.dora@windriver.com> References: <20250707121105.2226766-1-sunilkumar.dora@windriver.com> X-ClientProxiedBy: TYAPR01CA0135.jpnprd01.prod.outlook.com (2603:1096:404:2d::27) To DS0PR11MB7901.namprd11.prod.outlook.com (2603:10b6:8:f4::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB7901:EE_|PH0PR11MB5126:EE_ X-MS-Office365-Filtering-Correlation-Id: 32f34697-abe5-4a8b-93b7-08ddbd4f6de8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|366016|52116014|376014|38350700014; X-Microsoft-Antispam-Message-Info: x4ynVHYtVl+7IxJViHLpUFkSGFiJj70aFo/Xo7ttZH/72bGE0xSsU51Ru7iitRXslb26Sv+1OGF/hnUp8Jje2Ex/2Pc3I3hWofy5N8T08sZZRz/pJHvLBNmwTbsMSS51cbGEGDN/JSP4Rsy6bDAWNtZoBZsf/8ZejoTCowbxPbgroGwatRuuB1UOsd/BamwB3MUrtRcQSrdyuDg5/gcMvUgKKqIW2+N/KeoG1TL2oAPLy2RDZOiK7dFEaPLGbhUvtzBbaoR7tQs48uUDGyfR7c3Ly67LUCR25h7COW6metSigfLXGYl75/rhUSQTyF3VBG9zVf5+YkZCZZU+br2y+lB3G8rmtBq6rEJkos63o8kVGhBwBOkz2h3wZV3ULYoUQuvGnCCd7DbpOSEXpLc4JJGgckKM/h7DYntX4DA4qBtlsTy77v37l6Nqfeejq+IKMgZptJJ+107DmbPSglsci2riK0Oa+2b0WJYRy0dBof+KF6Y7/POL0dU2aEGcXUocq+Mswn4496zHcL4AtowLkUcEpYsrkWq6c/f0zwXrIz1xvD4OTW66W0j2gbg+0hq/u4hZebzLZTDCulF3bs+D+k+KMTc5ViyyEjiUu+PA/uTSD19hQzclY+GXex7DxdV78FuCWqubXez4Sy++YfvRpXcOtxmdYdg9n+DuNzDGM30VMuV9v1zVmN3ZrcY0Y5jUZGdKMmA43Qn6UEiHtIrnoG+HZ0LMco1DcxANjVNaFxsoCLXVGScOpyOuMPfLUQ4sjy/oEVCi8N56SsWVxss8RNYYMoshIOk8FeRxtDRIbuIIrBPd5qkNUgbsUoKpu7yB/J9+UlmtttrYO/IJKDrIDkZ1uHKYJiSoKNgLCnX921G2zhBevP0TfFJyCEMWGD5pcZIf8BWpruvW5olPcfwV1nN8esLRD39JWIUUH8uFVbqsIORw5HKzaHuirss6f8+rhXT7Su/FT7zdrPUx+7ObIR3U/DNEewLCt8Qj7UXs4I+kdgY1qpytK7vsg2NSMSLJOLxIMCrdGJYQL2+mvKqg7irSTlvi2ZQ13MqgyGoYiu7yRLScsJQDxFzSSo8tR0Lkhhyt31XeodMNIe2PO3PfLATiPGDLV7qhG8kibQq2alF1Iv51vduJ4DCz8adJ6qL1T1cE3YIUvbjcbT+v8Z6YwtVin9zoLEPVbOLXMs50xfFL9y3lst3I8NHiIIpUBHzp/w9FY/I6E20Sk6/nevI+jYdzhxBMoakA7ukhpDCFiOAT52LB3H2hhEG6CMcQmOyMRjubYe9fpZw3ujbcmdlbX4woEfGUIWtSxKqS+RvYRFQ/Hn0UhXJspn52rJlknWyuAqwv+83vX4xW6b3w4iPOWhXq2vIcSY2G/8O2PmISmGt001B9UxFZK2weyh/o1ci6jlA/MIClF5YlLX14Lcqibp0953jpt3M8vlOHuA0z7vH+WSCA+mUBSvyHdw/ntchdPI9lkf32jnvsF/G5+SAmpw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DS0PR11MB7901.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(52116014)(376014)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9NJNN3gInYQT0o2/uTdm8bNw7JwmlFjBtoHO5EvaBrqovRsiqIdwHzfyfAg+50zBhFxfHDwqTPVg15y5eReRp1rO4wEPn8BgsNKAiN+lobAjRaoRn/AWE1ks2R3lTfA54bGIbYNlR+ejWrkCwq7HsfuZCQ1A7hBj6+yQ036WQ8ZYiLABP0YHp5KC7xQ00nsJrwNIZS/FFjZ6T6l9s6B8iz4PDlJYaxZpgl/hsMe6jfR3yCOu+DVkGtllOYEFKmiKR+Q7dkf219XNYd9ikdUrcB1IXlnOhnCsclHCRIwHtVtd5mOxRfO6EBXMzcZWFt4sS6bxD6Yx1MkWsV4FRXIkUdN8sKBG1QKs27HJnnucbJTDJFGISrwxlIKMULz03QxNN1eKcgi/7hUVSvAeaMZDp6mafL3ZUdT+hA489dyy6T3dL4nDUh9+NrcUGiLSsnRPJS6XrdCT4fMWo8ILgx6uIfuGMTxYKzxi36r2ddAzTN+vkB+NP9TsKsVAKRh4kVaH2tNPOGVMz4n/7y6tFrYsQUgBju0HPF1UsMTifQCvFNANjRKVSAjlvpaWSWwaScy36ka5HA4xSAeWtLjJrPmN4XFxsPrYjuhxFOq39lEnFNBhOFkXWp6v7GXCLJxCGL5vJaWZZihdRlJ5v6Ou8mqg96ZejWjwKkq+uUxDqtVx0KQlbm8O4NjQNP7tRZOYMOAbSGgkDvsK407v5ho4UP/h6DneV9aY1C0H4d0hdYYDT1SOAOui5VefGZHar6YaIkG5uXJpdVxWqQLfu25LHh6IHCbz8rvzT1zTs4qm/esJar1BR50jynImcVsgjsvpu9cjF3DJJbO1NeMKKEyVfaDGwJ1i2ZZKOGhq1xq9WnL0W+aZllDGDAR+vm7wUh4J/LUakeNsBVoZRXgadFI2uOB8svYVuPQ4c1RwPNw5Xi/qk7zHZe/OlxoP+qneOAlWJdhbGDu3aGUYDE/2ShJU1rhbRm3qbHc7f4stcpnRND8moylqV6I6/a4wpBeCW57tCw1noU/kQIUjTQ7G/mlurDESSKYpPvipLt9wKi9xu0xzYpv2Q+xVfddCya8NThN85odPtfFatoVNY9TVmyWOELZxjSWUFmWtBdDuW1KktLy36lDTQ4+IYNPcHa100CvwLkRh4VpK0b2nfWw8b3gCjsH+WaPanaz6xElCvKNQqTaiR6QjNbjnRf6ovrkcL7Y6On+9J9FXIctfKzfvINxJ095vEHmc4Xcbq9+y5u+Eg13AK/rpE8/x3OxhhhM0KqcoZ4geiAxLoFP51SZ8E94FeGlPnJrb/sy19E2fhhMankb2Tnp/VFay+5UR9rhHo58vLtYUnpaiXdW6vDmcUchAYR4c8YdRXnja3Zs2awYfVHlRaW3CHfzy1f0uJ9DJV/mOBlir+0BfN4zZaiY6JA/fOnGZGRdPvA8NoB8eP+ej10JTT8X17au79kQkl/IKPz/1RPY94vgLDQT1dK2QownSlll1Gt8U6LfRsnyovGB8n8HeBvgl98bX8pF899CsyEXoLjhPs1Q1wHIVK+qHZv9E4R0mnau2dyWQ9gr/jAp9RlEJENfs/pbxdC8K/59kiiEMfnLfD/m86pdjWx9qS4DT3yt8ZA== X-OriginatorOrg: windriver.com X-MS-Exchange-CrossTenant-Network-Message-Id: 32f34697-abe5-4a8b-93b7-08ddbd4f6de8 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB7901.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2025 12:11:40.2691 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ddb2873-a1ad-4a18-ae4e-4644631433be X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: S2HS9JGDs7tvca8uGGRsiegfiRZsDdSsStmmI8mjFio7UKyco4HRUoZZ/xvxvs0T1bJdFt6SYm+yeoxZmsAQ6PHTgYOdSJRkhWcxnOBaoHg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5126 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzA3MDA3MSBTYWx0ZWRfX4WyfIsZsyNS/ vYEpLk9LBu9Rf97QQDdLuvtfpSWe8rRszqOvcpS33FZMjjhJNN3EWIHQ7XZ2IHfmxB1iRMIOdbh xR8aEOk0GKPmD5jEm7OZ7gdAJ+PdY42CiP33YaehK0na9v2lZHg9MpgDbUcSmauBNoWDVprDe34 T8GGFIXXiNrazsnvVytHjezLs/Fu4cZAUnyiB0svKKIa2dqnE+V07BVZ0kqm5BMez6iZRAIOfpe RhE84AehYGmPzBKK5GJH2g0wX2WdeOG14hsbIyfJVl3RmWPGdVxSt4rwcE4mQmqvknAf4u1qQbq 4MJL7A3olrP/SoU+V4c0niqBlxbpfWxWolfCZ2MiZHbgRzgeW1xIZvhFT9jWfmiDnk1ylndn1ZD I6ZLcivZDbiRbUC7YFh2Pb8k3N0cxc7sjkNGzDqOWalDuPUzhGETPnnPIA+KXhVZsxJlGXyk X-Authority-Analysis: v=2.4 cv=V5590fni c=1 sm=1 tr=0 ts=686bb97e cx=c_pps a=d1No8PtT6ZCK1EqvqO3Ujw==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=Wb1JkmetP80A:10 a=t7CeM3EgAAAA:8 a=g5cTviEHbg7wfX6xL70A:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: _p5GGVsmEc4Lm_9EXYlqdiMLQ_AKChW7 X-Proofpoint-GUID: _p5GGVsmEc4Lm_9EXYlqdiMLQ_AKChW7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-07_03,2025-07-07_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 mlxscore=0 spamscore=0 priorityscore=1501 clxscore=1015 suspectscore=0 adultscore=0 bulkscore=0 malwarescore=0 impostorscore=0 mlxlogscore=999 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.21.0-2505280000 definitions=main-2507070071 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org From: Malte Skarupke [BZ #25847] This variable used to be needed to wait in group switching until all sleepers have confirmed that they have woken. This is no longer needed. Nothing waits on this variable so there is no need to track how many threads are currently asleep in each group. Signed-off-by: Sunil Dora (cherry picked from commit c36fc50781995e6758cae2b6927839d0157f213c) --- nptl/pthread_cond_wait.c | 52 +------------------------ nptl/tst-cond22.c | 12 +++--- sysdeps/nptl/bits/thread-shared-types.h | 3 +- sysdeps/nptl/pthread.h | 2 +- 4 files changed, 9 insertions(+), 60 deletions(-) diff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c index 11fd45f9a2..0403df3257 100644 --- a/nptl/pthread_cond_wait.c +++ b/nptl/pthread_cond_wait.c @@ -143,23 +143,6 @@ __condvar_cancel_waiting (pthread_cond_t *cond, uint64_t seq, unsigned int g, } } -/* Wake up any signalers that might be waiting. */ -static void -__condvar_dec_grefs (pthread_cond_t *cond, unsigned int g, int private) -{ - /* Release MO to synchronize-with the acquire load in - __condvar_quiesce_and_switch_g1. */ - if (atomic_fetch_add_release (cond->__data.__g_refs + g, -2) == 3) - { - /* Clear the wake-up request flag before waking up. We do not need more - than relaxed MO and it doesn't matter if we apply this for an aliased - group because we wake all futex waiters right after clearing the - flag. */ - atomic_fetch_and_relaxed (cond->__data.__g_refs + g, ~(unsigned int) 1); - futex_wake (cond->__data.__g_refs + g, INT_MAX, private); - } -} - /* Clean-up for cancellation of waiters waiting for normal signals. We cancel our registration as a waiter, confirm we have woken up, and re-acquire the mutex. */ @@ -171,8 +154,6 @@ __condvar_cleanup_waiting (void *arg) pthread_cond_t *cond = cbuffer->cond; unsigned g = cbuffer->wseq & 1; - __condvar_dec_grefs (cond, g, cbuffer->private); - __condvar_cancel_waiting (cond, cbuffer->wseq >> 1, g, cbuffer->private); /* FIXME With the current cancellation implementation, it is possible that a thread is cancelled after it has returned from a syscall. This could @@ -327,15 +308,6 @@ __condvar_cleanup_waiting (void *arg) sufficient because if a waiter can see a sufficiently large value, it could have also consume a signal in the waiters group. - It is essential that the last field in pthread_cond_t is __g_signals[1]: - The previous condvar used a pointer-sized field in pthread_cond_t, so a - PTHREAD_COND_INITIALIZER from that condvar implementation might only - initialize 4 bytes to zero instead of the 8 bytes we need (i.e., 44 bytes - in total instead of the 48 we need). __g_signals[1] is not accessed before - the first group switch (G2 starts at index 0), which will set its value to - zero after a harmless fetch-or whose return value is ignored. This - effectively completes initialization. - Limitations: * This condvar isn't designed to allow for more than @@ -440,21 +412,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex, if ((int)(signals - lowseq) >= 2) break; - /* No signals available after spinning, so prepare to block. - We first acquire a group reference and use acquire MO for that so - that we synchronize with the dummy read-modify-write in - __condvar_quiesce_and_switch_g1 if we read from that. In turn, - in this case this will make us see the advancement of __g_signals - to the upcoming new g1_start that occurs with a concurrent - attempt to reuse the group's slot. - We use acquire MO for the __g_signals check to make the - __g1_start check work (see spinning above). - Note that the group reference acquisition will not mask the - release MO when decrementing the reference count because we use - an atomic read-modify-write operation and thus extend the release - sequence. */ - atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2); - // Now block. struct _pthread_cleanup_buffer buffer; struct _condvar_cleanup_buffer cbuffer; @@ -471,18 +428,11 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex, if (__glibc_unlikely (err == ETIMEDOUT || err == EOVERFLOW)) { - __condvar_dec_grefs (cond, g, private); - /* If we timed out, we effectively cancel waiting. Note that - we have decremented __g_refs before cancellation, so that a - deadlock between waiting for quiescence of our group in - __condvar_quiesce_and_switch_g1 and us trying to acquire - the lock during cancellation is not possible. */ + /* If we timed out, we effectively cancel waiting. */ __condvar_cancel_waiting (cond, seq, g, private); result = err; goto done; } - else - __condvar_dec_grefs (cond, g, private); /* Reload signals. See above for MO. */ signals = atomic_load_acquire (cond->__data.__g_signals + g); diff --git a/nptl/tst-cond22.c b/nptl/tst-cond22.c index 1336e9c79d..bdcb45c536 100644 --- a/nptl/tst-cond22.c +++ b/nptl/tst-cond22.c @@ -106,13 +106,13 @@ do_test (void) status = 1; } - printf ("cond = { 0x%x:%x, 0x%x:%x, %u/%u/%u, %u/%u/%u, %u, %u }\n", + printf ("cond = { 0x%x:%x, 0x%x:%x, %u/%u, %u/%u, %u, %u }\n", c.__data.__wseq.__value32.__high, c.__data.__wseq.__value32.__low, c.__data.__g1_start.__value32.__high, c.__data.__g1_start.__value32.__low, - c.__data.__g_signals[0], c.__data.__g_refs[0], c.__data.__g_size[0], - c.__data.__g_signals[1], c.__data.__g_refs[1], c.__data.__g_size[1], + c.__data.__g_signals[0], c.__data.__g_size[0], + c.__data.__g_signals[1], c.__data.__g_size[1], c.__data.__g1_orig_size, c.__data.__wrefs); if (pthread_create (&th, NULL, tf, (void *) 1l) != 0) @@ -152,13 +152,13 @@ do_test (void) status = 1; } - printf ("cond = { 0x%x:%x, 0x%x:%x, %u/%u/%u, %u/%u/%u, %u, %u }\n", + printf ("cond = { 0x%x:%x, 0x%x:%x, %u/%u, %u/%u, %u, %u }\n", c.__data.__wseq.__value32.__high, c.__data.__wseq.__value32.__low, c.__data.__g1_start.__value32.__high, c.__data.__g1_start.__value32.__low, - c.__data.__g_signals[0], c.__data.__g_refs[0], c.__data.__g_size[0], - c.__data.__g_signals[1], c.__data.__g_refs[1], c.__data.__g_size[1], + c.__data.__g_signals[0], c.__data.__g_size[0], + c.__data.__g_signals[1], c.__data.__g_size[1], c.__data.__g1_orig_size, c.__data.__wrefs); return status; diff --git a/sysdeps/nptl/bits/thread-shared-types.h b/sysdeps/nptl/bits/thread-shared-types.h index 2de6ff9caf..59f9adc59a 100644 --- a/sysdeps/nptl/bits/thread-shared-types.h +++ b/sysdeps/nptl/bits/thread-shared-types.h @@ -95,8 +95,7 @@ struct __pthread_cond_s { __atomic_wide_counter __wseq; __atomic_wide_counter __g1_start; - unsigned int __g_refs[2] __LOCK_ALIGNMENT; - unsigned int __g_size[2]; + unsigned int __g_size[2] __LOCK_ALIGNMENT; unsigned int __g1_orig_size; unsigned int __wrefs; unsigned int __g_signals[2]; diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h index 3d0d07ceb2..9d2eb4d512 100644 --- a/sysdeps/nptl/pthread.h +++ b/sysdeps/nptl/pthread.h @@ -152,7 +152,7 @@ enum /* Conditional variable handling. */ -#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } } +#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, 0, 0, {0, 0} } } /* Cleanup buffers */