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: AS16276 192.99.0.0/16 X-Spam-Status: No, score=-1.8 required=3.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI, RCVD_IN_MSPIKE_BL,RCVD_IN_MSPIKE_ZBI,RCVD_IN_SBL_CSS,RCVD_IN_XBL, SPF_FAIL,SPF_HELO_FAIL,TO_EQ_FM_DOM_SPF_FAIL shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from 80x24.org (ns504307.ip-192-99-4.net [192.99.4.116]) (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 1BC901F910 for ; Wed, 16 Nov 2022 09:54:10 +0000 (UTC) From: Eric Wong To: spew@80x24.org Subject: [PATCH] a not serious debug patch to track memory freed Date: Wed, 16 Nov 2022 09:54:04 +0000 Message-Id: <20221116095404.3974691-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: --- delta-islands.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/delta-islands.c b/delta-islands.c index 391e947cc6..e17ca6842b 100644 --- a/delta-islands.c +++ b/delta-islands.c @@ -454,14 +454,28 @@ static void deduplicate_islands(struct repository *r) free(list); } +/* + * hacked up an already hacky LD_PRELOAD-based malloc to track freed bytes: + * https://80x24.org/mwrap-perl.git commit 2b000285c63144bc + + * https://80x24.org/mwrap-perl/20221116094644.3974467-1-e@80x24.org/raw + */ +extern size_t __attribute__((weak)) mwrap_total_bytes_freed(void); + static void free_island_regexes(void) { unsigned int i; + if (mwrap_total_bytes_freed) + fprintf(stderr, "before fir: %zu\n", mwrap_total_bytes_freed()); + for (i = 0; i < island_regexes_nr; i++) regfree(&island_regexes[i]); FREE_AND_NULL(island_regexes); + + if (mwrap_total_bytes_freed) + fprintf(stderr, " after fir: %zu\n", mwrap_total_bytes_freed()); + island_regexes_alloc = island_regexes_nr = 0; } @@ -470,12 +484,19 @@ static void free_remote_islands(void) const char *island_name; struct remote_island *rl; + if (mwrap_total_bytes_freed) + fprintf(stderr, "before fri: %zu\n", mwrap_total_bytes_freed()); + kh_foreach(remote_islands, island_name, rl, { free((void *)island_name); oid_array_clear(&rl->oids); free(rl); }); kh_destroy_str(remote_islands); + + if (mwrap_total_bytes_freed) + fprintf(stderr, " after fri: %zu\n", mwrap_total_bytes_freed()); + remote_islands = NULL; }