From patchwork Wed Apr 1 20:12:21 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wilco Dijkstra X-Patchwork-Id: 132584 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 4D9CC4BA2E36 for ; Wed, 1 Apr 2026 20:14:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4D9CC4BA2E36 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=a9tFfj1r; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=a9tFfj1r X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011026.outbound.protection.outlook.com [52.101.65.26]) by sourceware.org (Postfix) with ESMTPS id 8D76D4BA2E05 for ; Wed, 1 Apr 2026 20:13:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8D76D4BA2E05 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8D76D4BA2E05 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=52.101.65.26 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1775074408; cv=pass; b=GGP165notEJgGHa4/ZB1JYMwI9nk72NljGFOmi1xT9yW5m+YL++0lM2giEmcxFCOiOUcDdfd0XllhmUneB7cwchSU1a9iEzwUzmCVXNboIy+Emq7Myd/qIGdVPF7igqTxQpO8vcN2cAK8izhGop4c2msrZjG3IfXRTxlE7PyP7o= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1775074408; c=relaxed/simple; bh=CfmiUpBZPtQxQzs8TcNv5RfGMGflVckdtZNiguQhQTc=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=d7521GHAYVPQhW6fB/xd14nZDz0PNcQoF7o9FJtjkBSICdnlM24+XLSKK3J+HFKxj36eyCoXu2vFuhZsRTe8U9q8NrplttEJDl1M00dg8nzQXnUPXrkhcfcEdLj84BbafZKxQPEDzjKfMEidVeRiyW1iIo70sdrXx88Olw3GY0U= ARC-Authentication-Results: i=3; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8D76D4BA2E05 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=c1HM2YQT9GB1iH3BDCA6XUpA/+HJ3rGlIL44M89hhPoxSjy7tity8qxqGUvThv8rbNM5mBz43pVzCiTYrlC6GENb8yGAXcJ946PvZSawrf1FPTHj5ZZT8/reqB54J4L9ySSXwEIUFF0onQ15Li6oe242pWkkNkkgYMhRdT+jNWDQh/uxb7NU3dIzIYJiF2bWn+iwA43zdosBBZdDtTdFPOZV8p/7JqT1c1iuAOV7I3SEGk0lO15SSUfRs+YBShrmhNgvpxsLCN2NhJfJGFUM4UJk1D5YXAgIQrHwUKjEvkIM6SvPZhytnW8pey/6me63Hj12/FhmeXYaspKUHSQM8A== ARC-Message-Signature: i=2; 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=qsP+jM4sYIBSZRs05BHyOEzYlNfdv/aNe150O0pnqy8=; b=fxfG943Ly/iwpUmssuXdAeKwcDUWkeiq13ZKAzb0k2OnLp8EyB4z8rMjm2bPfDPJiGML6tR+ARpy/HEYblZAiAh7mcdoeOdcpKzpJHlOcD+zVGUe1+erPKg4Ca3EcUKwpynNR/9JrrtMmeN8UqDQixr+dILaMRMmbjehGZiiI2FAwcmWSm0z/EJzOEnaAK6Gh4BPO9ExAbCxbIO9jigQdNnbkZcPMM8TfLw6Zv3L5kccmvQCPzwhu3BqNlFMFdf41yfvpdItrA//N8sB8Yq3s7bBOH/ZrpAurr2F4zRhFaDzs0HXM4bbpsyDTeQxBgJxbjhiCl+9oSQSX1H0wjJ0eQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qsP+jM4sYIBSZRs05BHyOEzYlNfdv/aNe150O0pnqy8=; b=a9tFfj1raGHOjG2O9ixJqROJfsJ7rma2XfGhtP7VXcWQVAP6TyfSDiXVOmHTJ7Ezs+MocaFemi/hG0Bu/D8xeJx3sGo9la9WNfJypx9l/QuxRgoxvcZ4VlIIyVI5XzeotWjVfx8mz/tL0kDmLUAUTjAjwyFi/rMz2k+dMG8N8uM= Received: from DUZP191CA0037.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:4f8::9) by DBBPR08MB10676.eurprd08.prod.outlook.com (2603:10a6:10:530::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Wed, 1 Apr 2026 20:13:24 +0000 Received: from DU2PEPF00028D11.eurprd03.prod.outlook.com (2603:10a6:10:4f8:cafe::73) by DUZP191CA0037.outlook.office365.com (2603:10a6:10:4f8::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9745.30 via Frontend Transport; Wed, 1 Apr 2026 20:13:24 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DU2PEPF00028D11.mail.protection.outlook.com (10.167.242.25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Wed, 1 Apr 2026 20:13:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YhKaJVOALzBX3Kxc04WJoMGhlxrsAh9cb59c+sA1ZlAJHg5Rl2nzja6t0jAW49AdmJRdpLSYGSwXuWoB7dV2hxnEBp8t/ZRR1H6tsk48EtefkzZYJduseSkcL7VbqeZUG+DZ6fvEH4SFDLUTU05RzSxnomPb0lngA111aiUsn0xC8jOwc96MxEGzvNY/044gc7Ewi0FKIsK/0/pJeReyyqkxj+RsULHUvc8DXM1qn/i8FyLjyVYB779gTyZcr/ybVM0NPxepLCJ3TNaYZ1IHOSr03VLqDdRRD7xRmlYPJm6kSNgcNyQh9V2M4W6jYYVbtAjONOkyS7GXq9qVKOjVYA== 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=qsP+jM4sYIBSZRs05BHyOEzYlNfdv/aNe150O0pnqy8=; b=M0vN9ZmmkiIwUwphViPb86JPqG0rpVayMjZ68UQo3RXQb8NOjA3XU2yXQifA718BwEPX9SSS8dZP0/fkQtkKDppk31kKg6/gEdxP4sbgLrjWkSFQiRMN1cgyLsCs2TBr5LeqXIjbNY0Q5ZRk6hVV/As/xN23Y00JoFAZYxkOGDDoh8HvKJh0gSoNFOo0eUEkWJFgeFAPXvZiPapT23lmU/AToOJDu5JyNhurWhSDJvnlT27B46pEqLQvWdOPyM2gCb9V4IbooEVeRDPda6xM2ISI8iF75bnwLZ8i6Tf5zr4QV37YgoVsMJY+68c27kP5BcGJtLQA59IPyiaGGtsseQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qsP+jM4sYIBSZRs05BHyOEzYlNfdv/aNe150O0pnqy8=; b=a9tFfj1raGHOjG2O9ixJqROJfsJ7rma2XfGhtP7VXcWQVAP6TyfSDiXVOmHTJ7Ezs+MocaFemi/hG0Bu/D8xeJx3sGo9la9WNfJypx9l/QuxRgoxvcZ4VlIIyVI5XzeotWjVfx8mz/tL0kDmLUAUTjAjwyFi/rMz2k+dMG8N8uM= Received: from PAWPR08MB8982.eurprd08.prod.outlook.com (2603:10a6:102:33f::20) by PR3PR08MB5724.eurprd08.prod.outlook.com (2603:10a6:102:85::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Wed, 1 Apr 2026 20:12:21 +0000 Received: from PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::5821:707a:c30b:dd9a]) by PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::5821:707a:c30b:dd9a%5]) with mapi id 15.20.9769.016; Wed, 1 Apr 2026 20:12:21 +0000 From: Wilco Dijkstra To: glibc developers Subject: [PATCH] malloc: Simplify _int_free_chunk Thread-Topic: [PATCH] malloc: Simplify _int_free_chunk Thread-Index: AQHcwhPA6TdGhBAV2kWrQkTjgL4leQ== Date: Wed, 1 Apr 2026 20:12:21 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: PAWPR08MB8982:EE_|PR3PR08MB5724:EE_|DU2PEPF00028D11:EE_|DBBPR08MB10676:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e5db563-47a8-406f-aff1-08de902b2106 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|366016|1800799024|376014|38070700021|56012099003|18002099003; X-Microsoft-Antispam-Message-Info-Original: zcjORE0u7hhT1vyvQuTCbsDQTWTwx6plznJ5fkGGLSj9WZm/0X1XroTbpUqT/akqWn80GAHKOx9YFeGQx9ZI1y7i+nC246NeDQ+p6vgCkj4RnpESfF70RhKvi4oL8tbEffSCEsA0GAAOvhSQfRvapfz4cJWA9d/LLeTnOfXhDTT8tyAujO0npSXUhqhR1y6a0G9d5CbHqptJml5e3BrQoCfesZG2o58At7bH2Ag99lGKTA2L4v3w+HAJPGlEAWG/PmuggaY7k4aGc3au49otHtbu2QUfIzSmr7j2ULs10Ur7AptRPCONC4jATC6BlrKq9LHqhqW2cVpD26PVtIKwNsRe5BkXLa4nZB2JmEhA1nWaXBvnCe17jYlaNYkzx59zNjL0V/r2u0K+FyI39Mgqlz5tz/bMg7xwwHYTZ1H1FEywh9w61tVr91VLxYDinN+fc5BwY1miLMkPkjqtyROPu/mA6x9fQ+2w2o4ljXq4f+xghIvs0t/tfj7EnAdy9nExGmjLqFceoihjGaQmXtwM8kPEVKIf9fEoGQV32mJ95Vhywkka9d23aNn+1B6/1jhOHwOfwhzMAFaTA9aeKyCkbAspA1wNPffjHoW0zUpQKhxB6e/EgtXD2ZVBuvslTHL/ykG3fD0SnqZOFaJTwBvlAL9Z3Z1mT52MtTfnEhct50wwdlcVXloWJIDBGSgY4hFEXmOXckwEz/v76DnowNWcnvtdctoo1OCPiq32nm3d6+KBfcQaXnWthDlTSWeTFSTlxR+FxoIok/5OljFuqfSeVKfiRs1OI5dpqCWrHtUJlLM= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAWPR08MB8982.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(38070700021)(56012099003)(18002099003); DIR:OUT; SFP:1101; MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: a8ckjvzhuBHkqkswIJqBbFzseHvyewz2EhoKaGGwJJIg+AOFWemohDtm+FnoiipDyEc9HKnDOgqmx0RpEOOUeu6PZUoHuuHQmVV44k+W0+TyTNv7Ol96JE+78QAjVA+Cjkg2H9AT+cWuA/dXrjwiwyX54Ac2QMuIA5pTDTomyLNGmzIMjJx+GN71eSnEGsyK8CD5TI9XEzMJvdn3RMQykWyWfs70pGjzXKhIjm942ZNT++UalexAPW7kwoPSauX+//ENBU+GqNCY+JvUxYhzDC+mkdj8IbU/EDoP9YT+TMwuVLyjT6vupbuUA8IqxmgfWLJFFVbtv1EG8PL8HNPiQw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5724 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028D11.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 58aef281-ad6c-460f-bad3-08de902afb98 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|1800799024|376014|14060799003|35042699022|36860700016|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: rRRNBEp27tVRb1R6Voxcjbmb5CAKQStHeC6A9RApgOfkBwBfwNeXYyyG8isSWPaiuUsz9qPGCHTSO/eYgysmmGoxLb8JtPpGveXCo/mMZD7BSUWodoUH1eZT2aGuWDywapeKiSZiJHeJR5BMrcDsTpDlEZYUzYEgspD6laEFp3EU20dFIWj0d3p23n+G+61rK5BgCy/Yxm0dqubGX6qr5TQ1aSrzwONFwKvaaRnbb7n5S553MwVqOlX4X2DKDTNZGMUX54kuyI5iRxFeAiEAfnlH4xB2DpqBRBFFOvVHEhVmBnD1arbbFe7LMGx1yP+/fN3w4nI8sDBa+sK4jkvGF1UatXNGTYlwXrro7FDzVnxTPFFePxXLQYIoZcoz/szgriXTowNLX0VVHWbnKtZiSUCNnvv29aFPDrEpf7PgKVwWC18zkZH8+V9ajRopfSJHaCCOZY33Yn1pPJMIedbzLZaoH3gRYe5si58YCxLzjyGSKYoEORzPtS7uzk28GzkHhLMt/KU9utgga1pInMX9CcIPosidom9EP8+AzBwFYkvOx4KK28rPXGrkZs8EkpHjW1LqAXOrMyKi/T0f2RholD/MHa7bhu3NlvtcIzJHjdGtdq2zWuskEWhMyE7awln6IYOHuTiHBkxzC+DEd0WJlMT/pfkXarXPRLLd95Rnbsia3xHoPXNT6lrbEbFKGivaplgYxcZsu/ToPD/BxpfQxNfFkuXX4dkK8uytbmQ+MweVf86MMeGGZm2RfP1DB2OqKRt/l9pij8a01a1yjiAv1Q== X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(376014)(14060799003)(35042699022)(36860700016)(18002099003)(56012099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: l59GZH1ujyK1s0rMRpINBIQ38bFv6YqktdNF0cM2IOHuSKNIBme7bhBEVdc/A+pY5WiqAkkFSwoSOgPDj/XNtF/F9DHOg/x70L51ttKyK2o78CdfeBtNJ9ggDcA6vUotcmTj8BFHAzXnbGMG38udu0+hB5TJUCj72BQnTUZSe88GljNzUteeaxtPpXV3+EG4QuBXJvk0mCmxf+6nboxEUU9R2fIgK4j7pQkojnljxII0HW5kS8Rsp1KQVHSDRdo9uN7AVbAjV32JK2jbcvnKaF+Y/V79EsGIN8R7EfMeGxhTghPnKFVXKGYN2qFYW8iI9kCQfqUjpDg130/FS992TMH4aQP4PzQljIX7Ulnlg151e8nj1tBZ4B+7+w/1xSNgZ7kqEG2FWzDa2tVngnauRNQ4f2uNm+sow3AZBs2kjX10qgDOjsjzCZH1irYGzYEh X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Apr 2026 20:13:24.4781 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8e5db563-47a8-406f-aff1-08de902b2106 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028D11.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB10676 X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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 Simplify _int_free_chunk() and always lock if needed. Use _int_free_merge_chunk() for cases that assume the arena has been locked instead. Move the errno save/ restore to _int_free_maybe_trim(). Passes regress, OK for commit? diff --git a/malloc/malloc-check.c b/malloc/malloc-check.c index 49b623df12ffa7afe376b73b2ad222d357dc6612..d85986b23d1bb0beb5ccc29d380ca96daf8ef41a 100644 --- a/malloc/malloc-check.c +++ b/malloc/malloc-check.c @@ -233,10 +233,10 @@ free_check (void *mem) } else { + __libc_lock_unlock (main_arena.mutex); /* Mark the chunk as belonging to the library again. */ (void)tag_region (chunk2mem (p), memsize (p)); - _int_free_chunk (&main_arena, p, chunksize (p), 1); - __libc_lock_unlock (main_arena.mutex); + _int_free_chunk (&main_arena, p, chunksize (p)); } __set_errno (err); } diff --git a/malloc/malloc.c b/malloc/malloc.c index 6a888b0eb7de53ae7b814275e86d2bd2f06b5e53..af2a902320b2f671524ba826fe828ee65bfa9cda 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -1024,7 +1024,7 @@ typedef struct malloc_chunk* mchunkptr; /* Internal routines. */ static void* _int_malloc(mstate, size_t); -static void _int_free_chunk (mstate, mchunkptr, INTERNAL_SIZE_T, int); +static void _int_free_chunk (mstate, mchunkptr, INTERNAL_SIZE_T); static void _int_free_merge_chunk (mstate, mchunkptr, INTERNAL_SIZE_T); static INTERNAL_SIZE_T _int_free_create_chunk (mstate, mchunkptr, INTERNAL_SIZE_T, @@ -2403,7 +2403,7 @@ sysmalloc (INTERNAL_SIZE_T nb, mstate av) CHUNK_HDR_SZ | PREV_INUSE); set_foot (chunk_at_offset (old_top, old_size), CHUNK_HDR_SZ); set_head (old_top, old_size | PREV_INUSE | NON_MAIN_ARENA); - _int_free_chunk (av, old_top, chunksize (old_top), 1); + _int_free_merge_chunk (av, old_top, chunksize (old_top)); } else { @@ -2674,7 +2674,7 @@ sysmalloc (INTERNAL_SIZE_T nb, mstate av) /* If possible, release the rest. */ if (old_size >= MINSIZE) { - _int_free_chunk (av, old_top, chunksize (old_top), 1); + _int_free_merge_chunk (av, old_top, chunksize (old_top)); } } } @@ -3171,12 +3171,12 @@ tcache_thread_shutdown (void) tcache_tmp->entries[i] = REVEAL_PTR (e->next); e->key = 0; p = mem2chunk (e); - _int_free_chunk (arena_for_chunk (p), p, chunksize (p), 0); + _int_free_chunk (arena_for_chunk (p), p, chunksize (p)); } } p = mem2chunk (tcache_tmp); - _int_free_chunk (arena_for_chunk (p), p, chunksize (p), 0); + _int_free_chunk (arena_for_chunk (p), p, chunksize (p)); } /* Initialize tcache. In the rare case there isn't any memory available, @@ -3350,7 +3350,7 @@ __libc_free (void *mem) size - MINSIZE))) return malloc_printerr_tail ("free(): invalid size"); - _int_free_chunk (arena_for_chunk (p), p, size, 0); + _int_free_chunk (arena_for_chunk (p), p, size); } libc_hidden_def (__libc_free) @@ -3472,7 +3472,7 @@ __libc_realloc (void *oldmem, size_t bytes) size_t sz = memsize (oldp); memcpy (newp, oldmem, sz); (void) tag_region (chunk2mem (oldp), sz); - _int_free_chunk (ar_ptr, oldp, chunksize (oldp), 0); + _int_free_chunk (ar_ptr, oldp, chunksize (oldp)); } } @@ -4253,11 +4253,10 @@ _int_malloc (mstate av, size_t bytes) ------------------------------ free ------------------------------ */ -/* Free chunk P of SIZE bytes to the arena. HAVE_LOCK indicates where - the arena for P has already been locked. Caller must ensure chunk - and size are valid. */ +/* Free chunk P of SIZE bytes to the arena AV (which is not locked). + Caller must ensure chunk and size are valid. */ static void -_int_free_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T size, int have_lock) +_int_free_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T size) { /* Consolidate other non-mmapped chunks as they arrive. @@ -4265,22 +4264,14 @@ _int_free_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T size, int have_lock) if (!chunk_is_mmapped(p)) { - /* Preserve errno in case block merging results in munmap. */ - int err = errno; - - /* If we're single-threaded, don't lock the arena. */ if (SINGLE_THREAD_P) - have_lock = true; - - if (!have_lock) - __libc_lock_lock (av->mutex); - - _int_free_merge_chunk (av, p, size); - - if (!have_lock) - __libc_lock_unlock (av->mutex); - - __set_errno (err); + _int_free_merge_chunk (av, p, size); + else + { + __libc_lock_lock (av->mutex); + _int_free_merge_chunk (av, p, size); + __libc_lock_unlock (av->mutex); + } } /* If the chunk was allocated via mmap, release via munmap(). @@ -4309,8 +4300,8 @@ _int_free_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T size, int have_lock) } } -/* Try to merge chunk P of SIZE bytes with its neighbors. Put the - resulting chunk on the appropriate bin list. P must not be on a +/* Try to merge chunk P of SIZE bytes from locked arena AV with its neighbors. + Put the resulting chunk on the appropriate bin list. P must not be on a bin list yet, and it can be in use. */ static void _int_free_merge_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T size) @@ -4440,6 +4431,9 @@ _int_free_maybe_trim (mstate av, INTERNAL_SIZE_T size) if ATTEMPT_TRIMMING_THRESHOLD is reached. */ if (size >= ATTEMPT_TRIMMING_THRESHOLD) { + /* Preserve errno. */ + int err = errno; + if (av == &main_arena) { #ifndef MORECORE_CANNOT_TRIM @@ -4456,6 +4450,8 @@ _int_free_maybe_trim (mstate av, INTERNAL_SIZE_T size) assert (heap->ar_ptr == av); heap_trim (heap, mp_.top_pad); } + + __set_errno (err); } } @@ -4549,7 +4545,7 @@ _int_realloc (mstate av, mchunkptr oldp, INTERNAL_SIZE_T oldsize, (void) tag_region (oldmem, sz); newmem = tag_new_usable (newmem); memcpy (newmem, oldmem, sz); - _int_free_chunk (av, oldp, chunksize (oldp), 1); + _int_free_merge_chunk (av, oldp, chunksize (oldp)); check_inuse_chunk (av, newp); return newmem; } @@ -4577,7 +4573,7 @@ _int_realloc (mstate av, mchunkptr oldp, INTERNAL_SIZE_T oldsize, (av != &main_arena ? NON_MAIN_ARENA : 0)); /* Mark remainder as inuse so free() won't complain */ set_inuse_bit_at_offset (remainder, remainder_size); - _int_free_chunk (av, remainder, chunksize (remainder), 1); + _int_free_merge_chunk (av, remainder, chunksize (remainder)); } check_inuse_chunk (av, newp);