From patchwork Wed Mar 9 13:16:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775057 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7BDD1C433EF for ; Wed, 9 Mar 2022 13:17:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233062AbiCINSr (ORCPT ); Wed, 9 Mar 2022 08:18:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37792 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229843AbiCINSp (ORCPT ); Wed, 9 Mar 2022 08:18:45 -0500 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17D831066D4 for ; Wed, 9 Mar 2022 05:17:46 -0800 (PST) Received: by mail-wm1-x32c.google.com with SMTP id v2-20020a7bcb42000000b0037b9d960079so3386993wmj.0 for ; Wed, 09 Mar 2022 05:17:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cMd8CbAEW9TqiO4Kd0qqoXifFaip1chte21eewnminQ=; b=Pdz612+Cx6PEndKNGrJr9ARIJ30vb5aHw7seuihjDdnJoEesMQ3Jw956hyU6yendAq 2By/MWFGE3c30lIg4LgWXRjbyi4RAZ/q0ygsEqPLBuCKchoIaOGEcJttI0s7697sldRh 7a1m6v4BCn9j79hcLvFjHfZzsC7YzaHicUF79kbN16WGMNzGZwXHQrqfXontOdYO3nAm DRxf8QkAm2mQRMz+rJEMxYJPn7mX2KiuLf5pvDurOfzxzxJT4PWnNxI9BqMj7sZsqvN4 9N1HhwKoVf8enKpPPBgP2OZn8L6dsVdVGpxh7BcGZmbSdpx50IsqJCE8yajDsxCbr88n HMlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cMd8CbAEW9TqiO4Kd0qqoXifFaip1chte21eewnminQ=; b=vFQCn06k2DXtBz/I2I5faOaKQcTPfuCDCNL99SiVTPqfiJ17eyk2MxPBa+NXWsBQPy FUVdv6T2fp4qi8LvB21D0UlfXJaKdbD4Lu1KcvzKKNmaOrPE7CjENUZTb7ypffcZWqw+ uZH7HLNI37U4+Nq5NNBllU2hz3X+gEIa/mWNiUQhz/s0+58/REF169yFNUMG4+rL4LbW Q6WNNEDYAcoqz4pA4NYRxA71XxDdGDF46F4dZ5qcjgqAPif0qJag2NVQJR7RiiwttvVW oXGrvzzKWz55mDnS06kF3sIOR6WYJ17OGOMDEi+8Ulxl4s8pWSsxhr4YhbJ5LFVgPZce sFFg== X-Gm-Message-State: AOAM533rs48a0cnM7UUXQsmPmVCASP8IXHJQ95NB0iQ6lZLRHZxtXJq/ uJQdyiwg6gM5ahM5YJIbstzB2d2bIcI= X-Google-Smtp-Source: ABdhPJz2fG5TNMmA+CINo3QBW+IJTIBjrhGWvA6Drtkrx+Y/3SeI/0nlx9dF4DjFwpa2zjlkotxBFg== X-Received: by 2002:a05:600c:218c:b0:389:a415:b84f with SMTP id e12-20020a05600c218c00b00389a415b84fmr7563069wme.11.1646831864331; Wed, 09 Mar 2022 05:17:44 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:43 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 01/24] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Date: Wed, 9 Mar 2022 14:16:31 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Fix a memory leak that's been with us since f9500261e0a (fast-rebase: write conflict state to working tree, index, and HEAD, 2021-05-20) changed this code to move these strbuf_release() into an if/else block. We'll also add to "reflog_msg" in the "else" arm of the "if" block being modified here, and we'll append to "branch_msg" in both cases. But after f9500261e0a only the "if" block would free these two "struct strbuf". This change is needed so that a subsequent addition of a "goto cleanup" pattern when adding release_revisions() doesn't solve this unrelated bug while it's at it. Signed-off-by: Ævar Arnfjörð Bjarmason --- t/helper/test-fast-rebase.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/t/helper/test-fast-rebase.c b/t/helper/test-fast-rebase.c index fc2d4609043..993b90eaedd 100644 --- a/t/helper/test-fast-rebase.c +++ b/t/helper/test-fast-rebase.c @@ -201,8 +201,6 @@ int cmd__fast_rebase(int argc, const char **argv) } if (create_symref("HEAD", branch_name.buf, reflog_msg.buf) < 0) die(_("unable to update HEAD")); - strbuf_release(&reflog_msg); - strbuf_release(&branch_name); prime_cache_tree(the_repository, the_repository->index, result.tree); @@ -221,5 +219,8 @@ int cmd__fast_rebase(int argc, const char **argv) if (write_locked_index(&the_index, &lock, COMMIT_LOCK | SKIP_IF_UNCHANGED)) die(_("unable to write %s"), get_index_file()); + + strbuf_release(&reflog_msg); + strbuf_release(&branch_name); return (result.clean == 0); } From patchwork Wed Mar 9 13:16:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775058 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A9A59C433FE for ; Wed, 9 Mar 2022 13:17:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233065AbiCINSu (ORCPT ); Wed, 9 Mar 2022 08:18:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233054AbiCINSp (ORCPT ); Wed, 9 Mar 2022 08:18:45 -0500 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E73AC14FBF1 for ; Wed, 9 Mar 2022 05:17:46 -0800 (PST) Received: by mail-wr1-x42a.google.com with SMTP id x15so2936164wru.13 for ; Wed, 09 Mar 2022 05:17:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YuVGpbZGk27UjxrE8ZOvmt37LP90Wns4uQu2mYun1/k=; b=gT3cIq27gCnaLDyHWyRm1pH4K1G01qHj/y0J7ku+dBQHvkl7fNYFJX3UaNYGnbkblu GDxxIVB73KZvCvEhTaVQcNgeLUe4pwb7gwjQq+Wpa7QYj8a0k9sK+8Wf4A8nUTBqZYSA xhDKWpzHKbCrkfFFopV8YBmRD89p03/VgCTG4bKl+gRq74ei1cfpyWdI5/X53f/JnXEX QRutVzVPqAztjM5DzrXUIE1/bHB2dZvoRwd0jFQrOiwsHYvjR9MoSBeNxN2glOc/nIJh ndfTWulceFayGxKyIDJt2++TDkAvwUqXSQLbDCmc1IetOEfTAPll7Agm2JzOgtWK6nDK u3nA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YuVGpbZGk27UjxrE8ZOvmt37LP90Wns4uQu2mYun1/k=; b=zVIhOQJfhj3A1NvaM0gEfy0fdp1JBDQbgYcragvZ7KafoD1Ky8Noqq5ZQurNnB6MCr /BTAJ7xj8PwciuWPvoymtu+w8XdAPkOj7jidwa25aSQeFaLwhY25XPVbDSw+eU52B7ej cGrDY/LYLveCqmDK2EbaftqKLLOsQQJc+QM+gqS+IJNaQL6TPgY8XCLlzi6h9qpz3b1P SeZiystH+LWCRGbvurmHB8Nqrc4szuxVbPPmc3mxnF7Ci+vRC3DuglvnpIFmenxSUqki UV9x/3dawuxPWZZr/H5v53Wa/mD3ZRUMSRdPNwhfQpkIySWDBza8Sn+FOjmQ2EHp7Bmn 9zMw== X-Gm-Message-State: AOAM530ZFCHrsInbitJz458CKprUy4p4l379KDTHRhqs/mMdNKnbr9gx poy8RBreaYePZUqwE9iQ7Wcc9Ffn2jk= X-Google-Smtp-Source: ABdhPJxgXwOyy9nzUzW35LpwDI5hCGQtxKOnmOSMvPXJ+spOq22Lxhy7fdexrdlK1ZduQ0SePa45vA== X-Received: by 2002:a5d:45ca:0:b0:1ea:9bf9:ce5a with SMTP id b10-20020a5d45ca000000b001ea9bf9ce5amr15907543wrs.620.1646831865266; Wed, 09 Mar 2022 05:17:45 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:44 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 02/24] blame: use "goto cleanup" for cleanup_scoreboard() Date: Wed, 9 Mar 2022 14:16:32 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Amend a freeing pattern added in 0906ac2b54b (blame: use changed-path Bloom filters, 2020-04-16) to use a "goto cleanup", so that we can be sure that we call cleanup_scoreboard(). This change is needed so that a subsequent addition of a release_revisions() doesn't solve this unrelated issue while it's at it. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/blame.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builtin/blame.c b/builtin/blame.c index 8d15b68afc9..885b381ab83 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1167,7 +1167,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) if (!incremental) setup_pager(); else - return 0; + goto cleanup; blame_sort_final(&sb); @@ -1201,6 +1201,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) printf("num commits: %d\n", sb.num_commits); } +cleanup: cleanup_scoreboard(&sb); return 0; } From patchwork Wed Mar 9 13:16:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775059 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3D40C433F5 for ; Wed, 9 Mar 2022 13:17:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233073AbiCINSw (ORCPT ); Wed, 9 Mar 2022 08:18:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37876 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233059AbiCINSr (ORCPT ); Wed, 9 Mar 2022 08:18:47 -0500 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F36FD14FFE8 for ; Wed, 9 Mar 2022 05:17:47 -0800 (PST) Received: by mail-wr1-x42b.google.com with SMTP id p9so2956043wra.12 for ; Wed, 09 Mar 2022 05:17:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=AGRtydwUAAL/pJbRKXwRWN+K2yyQYXB33ugVthGbh40=; b=j94HtLZwBIepM41NIqMg1NVEShoxySOt7r68ukpsnidqlswaC0QcILWsQa6fRnveLp 18PadqmRRI+0pt1igImiCNK3pARJq2boPbVh8m6ltX0/Y++tVn/BPpvWhekcyD6KSO76 Ub3RFOpc5jj5QMQ8sV0gqaZOEhzlqDJuKqKBaSy7P7qr7BiC/V2C05Mb80u6adoOwnWQ /28d12lD8oD2kJ+yQ++bWO4aGy8vdi7zLvYVIwBsgNkJCuuPyp8KRYIVQJl92NrfotJ5 ynJcCWmpFFDJtzIexbJdTLsKwFZFF++ZcRpiHGFpadVT5aQKrylY2YuALRWdnmVhdPlF vIxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AGRtydwUAAL/pJbRKXwRWN+K2yyQYXB33ugVthGbh40=; b=F9cnjpo9g9tEltWEPn5WODi19ZqzX54YyUoh+reo9WwL3kpI7wnmgTIe6thRGp84pN dwbNyuLVmInrB0yzXv7SNDifSRXEmuGaNI6xymtCzmOl6T0BZlRjLyiE39kW3BYzroq2 aAPIMJq04D7UEP82hVjRIjx2rgnqvEdYpfmqltg9lQ/cC490E/G0cNc0R4THG1HUK1zr U6DHJCdxJJDTcl5VS6ZYV0BaQKzDb+1oJJBBYa0u5s9zUJhg0UetpLa8msu4xV7nZoUY lNLio2qUmtyCXW+SB5+q39B9dQ1Xe/CytPRzTU6r1EUXz6kEUuiQuH770i8h8g5rKUfa d2Uw== X-Gm-Message-State: AOAM530Qm4bVR1sZa9O9ara/lnt7M2xoMwElhY5kdx2DYHm41j2YdS4d TF5h6nruDcrswKJGSaCYOpw8pcRvxPk= X-Google-Smtp-Source: ABdhPJxOlibpScZkDtkrHrLgGGeJICOj3K+x+SukwTaQvEzIs+WJMqmYp9RDfaxl15FacJrM/iDu/g== X-Received: by 2002:a05:6000:1549:b0:1f1:e564:874c with SMTP id 9-20020a056000154900b001f1e564874cmr14920256wry.668.1646831866136; Wed, 09 Mar 2022 05:17:46 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:45 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 03/24] format-patch: don't leak "extra_headers" or "ref_message_ids" Date: Wed, 9 Mar 2022 14:16:33 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Fix two memory leaks in "struct rev_info" by freeing that memory in cmd_format_patch(). These two are unusual special-cases in being in the "struct rev_info", but not being "owned" by the code in revision.c. I.e. they're members of the struct so that this code in "builtin/log.c" can pass information code in log-tree.c. See 20ff06805c6 (format-patch: resurrect extra headers from config, 2006-06-02) and d1566f7883f (git-format-patch: Make the second and subsequent mails replies to the first, 2006-07-14) for the initial introduction of "extra_headers" and "ref_message_ids". We can count on repo_init_revisions() memset()-ing this data to 0 however, so we can count on it being either NULL or something we allocated. In the case of "extra_headers" let's add a local "char *" variable to hold it, to avoid the eventual cast from "const char *" when we free() it. While we're at it let's also move to using string_list_init_nodup() instead of relying on calloc() implicitly coming up with the same result. See 770fedaf9fb (string-list.[ch]: add a string_list_init_{nodup,dup}(), 2021-07-01) for the introduction of the string_list_init_nodup() helper. The string_list_clear() here is redundant due to the *_nodup() initialization, but let's add it anyway for consistency with other API use. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/log.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/builtin/log.c b/builtin/log.c index c211d66d1d0..00846c2c8ac 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1746,6 +1746,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) struct commit *commit; struct commit **list = NULL; struct rev_info rev; + char *extra_headers = NULL; struct setup_revision_opt s_r_opt; int nr = 0, total, i; int use_stdout = 0; @@ -1946,7 +1947,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) strbuf_addch(&buf, '\n'); } - rev.extra_headers = strbuf_detach(&buf, NULL); + extra_headers = strbuf_detach(&buf, NULL); + rev.extra_headers = extra_headers; if (from) { if (split_ident_line(&rev.from_ident, from, strlen(from))) @@ -2173,8 +2175,10 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) prepare_bases(&bases, base, list, nr); } - if (in_reply_to || thread || cover_letter) - rev.ref_message_ids = xcalloc(1, sizeof(struct string_list)); + if (in_reply_to || thread || cover_letter) { + rev.ref_message_ids = xmalloc(sizeof(*rev.ref_message_ids)); + string_list_init_nodup(rev.ref_message_ids); + } if (in_reply_to) { const char *msgid = clean_message_id(in_reply_to); string_list_append(rev.ref_message_ids, msgid); @@ -2281,6 +2285,11 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) strbuf_release(&rdiff1); strbuf_release(&rdiff2); strbuf_release(&rdiff_title); + free(extra_headers); + if (rev.ref_message_ids) { + string_list_clear(rev.ref_message_ids, 0); + free(rev.ref_message_ids); + } UNLEAK(rev); return 0; } From patchwork Wed Mar 9 13:16:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775060 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8490AC433F5 for ; Wed, 9 Mar 2022 13:17:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233080AbiCINSy (ORCPT ); Wed, 9 Mar 2022 08:18:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37884 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233061AbiCINSr (ORCPT ); Wed, 9 Mar 2022 08:18:47 -0500 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C9B26105A9B for ; Wed, 9 Mar 2022 05:17:48 -0800 (PST) Received: by mail-wr1-x433.google.com with SMTP id i8so2980657wrr.8 for ; Wed, 09 Mar 2022 05:17:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xVYpo1KgbYbl9ylNUepqtec7JP7ElijGpXN7W5fdH14=; b=JI2GsLhstfmKZr/fnIIaQ3NmdNmVNkVyKwTREUKw7JKmpiFsZlcLVUG1EJPQP8xhFS Z3o9cokufa8b6Ey4sYeef06dp1NiaUk4IJLtqiNUexJK8qclA56uBl8jyxJHaK8ROWjj 09N0l/jkAzhJuIX8DOARHjxwP0CHzt0PXAtMqbg3FLyw0xpZUg2rRmofvbjVKe4MYdKc 3OgEGIRXw7IoQo7FGA4b99CSBk4LstYWMb6vokVcyiZIqhtxO/X/SuwLGy3kGwA4tbl0 GAkzkWeDcW5TKkT4217BIzrAj+acHhttKTIls6TZC4W5FFbw1qr0Emsb3NSu8Qf1PGOj FIZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xVYpo1KgbYbl9ylNUepqtec7JP7ElijGpXN7W5fdH14=; b=XAfc0k1kf2dL+rHX3DLm6hij5QClbHn7+1ak1PCPtMiwiDfuTEl0Rsuk0ZU02cWwVn mmEVu8esHFn490wpWV7G08hKbxYQwULAZ5kY9E7NVwD9+qf0UQjo1GkaILfwnSikIAYu Ja8g4v18K/pQSbYCwMjCeQHH/utn64c/h8fg3kbypah56ZLFkAYOUlBBDQ5DnJ7EjmKh AiVnEXuNH9Zi5BsVSOz52o5POZQwLa64vgDSXf3lFPz6lC2w0cQWktbfSPylSkaLrcfk 6Mp+IaEmDsmLlrbGOo8c3AqwEOgYUBxYJL4NL+sJNH46/q1G+SShZIB+k91zkNVZOp+b PZyQ== X-Gm-Message-State: AOAM532uZIHikw0T6aupJj/9CkIYmfKPWSG6gxzYKA/H5m0vtHRSfznd 2e55aNYz3dZeMuNUChXD8cZjpmJ+zeOSFA== X-Google-Smtp-Source: ABdhPJwJt3p/u145gpp7F3lNU1+ZgqwGgSuDGH2ltZqCAdPgQsmuEWTNxjOgPdeLGiaMZiKzNoea0w== X-Received: by 2002:adf:d211:0:b0:203:8141:4db6 with SMTP id j17-20020adfd211000000b0020381414db6mr405611wrh.706.1646831867093; Wed, 09 Mar 2022 05:17:47 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:46 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 04/24] revision.[ch]: split freeing of revs->commit into a function Date: Wed, 9 Mar 2022 14:16:34 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Move the existing code for invoking free_commit_list() and setting revs->commits to NULL into a new release_revisions_commit_list() function. This will be used as part of a general free()-ing mechanism for "struct rev_info". Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/revision.c b/revision.c index 2bb913f2f3f..5824fdeddfd 100644 --- a/revision.c +++ b/revision.c @@ -2916,6 +2916,16 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s return left; } +static void release_revisions_commit_list(struct rev_info *revs) +{ + struct commit_list *commits = revs->commits; + + if (!commits) + return; + free_commit_list(commits); + revs->commits = NULL; +} + static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) { struct commit_list *l = xcalloc(1, sizeof(*l)); @@ -4073,10 +4083,7 @@ static void create_boundary_commit_list(struct rev_info *revs) * boundary commits anyway. (This is what the code has always * done.) */ - if (revs->commits) { - free_commit_list(revs->commits); - revs->commits = NULL; - } + release_revisions_commit_list(revs); /* * Put all of the actual boundary commits from revs->boundary_commits From patchwork Wed Mar 9 13:16:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775061 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E8968C433EF for ; Wed, 9 Mar 2022 13:18:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233082AbiCINS6 (ORCPT ); Wed, 9 Mar 2022 08:18:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38032 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231768AbiCINSt (ORCPT ); Wed, 9 Mar 2022 08:18:49 -0500 Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D17B814FBF1 for ; Wed, 9 Mar 2022 05:17:49 -0800 (PST) Received: by mail-wr1-x435.google.com with SMTP id t11so2988504wrm.5 for ; Wed, 09 Mar 2022 05:17:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PCG4MMCgIYtqXbvAkToeqJcwTWrMDkWxs2VS7nARu8M=; b=RmRcPFNpefLAbBprcEG53cvd2lROjKTqtHWTHagStZ23Mk57y1txVIm9asraPyBsui nNvkvVe2pTq0eMEYEToXYqLljfRIXBx2oasL8mOVjwDwN0AppmpU9Ev6fOgTAJekxRdY 9Ux2bqXO38F36nHqv7R2z9gyi10wCbsmpzvDJF6jvrh+wEGB1pQssg4KGhi4kVnx807s pEChMNA5pHQChtB41HjbK0Whz+7GrPVJG9sJ4wuwgVVtt3qaAdyGXwLTWwl+PdUGGd2y neFtLbve4ltSP2Od6YYKAwfK5sbSoFEUuP9/mBmCTI1kN2tBw3Gcii91Tb1f/uE4VEZ7 MWAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PCG4MMCgIYtqXbvAkToeqJcwTWrMDkWxs2VS7nARu8M=; b=s7yvyjK/ayMg2osVcRd/tdC9HWsOpmANIA1tvbScK8xw748BdtOI4cQCNIwXIJCjdx I/gQPdK7vxse2Aj4zkBxwq+JjNWVJM3Mxvjud3tOjJ4MbDLhkOZmJbPb+euFvUjEadgU skfyI3leg1/sRT/6Hpd5n9Sbd9+M0DbyS1wUFEF69qMG0ST1Z1dyX0EsYI5NO5u4LB6P YTRfwhxq8YwUQ2ipukRVf1H7KL22thsLm1Sfin35fbmQj4xgL3UmlN4JnZVG8DfLJnUa l2NgStyxwxvrAOL6c6PZD3Q4U9swlOi+x7KQX+gEO9xk9oXz3lZsfyDwGU1tzE8dD5Vm qFAg== X-Gm-Message-State: AOAM530E4NAOPt3X4orEj53l3r5F3n06GvUcpXKIJZIw4dEGhilXXLBG dquYhnF2oFZosbOHw1cbggyX91s3APb9Tw== X-Google-Smtp-Source: ABdhPJyGyIj0dLn+XiRg4abOhoc6jaZUSKJMKKMeVT1u/31FEBapvaZM7c1u3X11IgK/klhVEl+ziw== X-Received: by 2002:a05:6000:23a:b0:1f0:2359:9cd5 with SMTP id l26-20020a056000023a00b001f023599cd5mr15816024wrz.335.1646831868080; Wed, 09 Mar 2022 05:17:48 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:47 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 05/24] revision.[ch]: provide and start using a release_revisions() Date: Wed, 9 Mar 2022 14:16:35 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The users of the revision.[ch] API's "struct rev_info" are a major source of memory leaks in the test suite under SANITIZE=leak, which in turn adds a lot of noise when trying to mark up tests with "TEST_PASSES_SANITIZE_LEAK=true". The users of that API are largely one-shot, e.g. "git log", so arguably freeing the memory is a waste of time, but in many cases they've actually been trying to free the memory, and just doing that in a buggy manner. Let's provide a release_revisions() function for these users, and start migrating them over per the plan outlined in [1]. Right now this only handles the "pending" member of the struct, but more will be added in subsequent commits. Even though we only clear the "pending" member now, let's not leave a trap in code like the pre-image of index_differs_from(), where we'd start doing the wrong thing as soon as the release_revisions() learned to clear its "diffopt". I.e. we need to call release_revisions() after we've inspected any state in "struct rev_info". 1. https://lore.kernel.org/git/87a6k8daeu.fsf@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/checkout.c | 2 +- builtin/stash.c | 3 +-- diff-lib.c | 6 ++++-- range-diff.c | 2 +- revision.c | 7 +++++++ revision.h | 6 ++++++ wt-status.c | 7 ++++--- 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/builtin/checkout.c b/builtin/checkout.c index 9244827ca02..ed993383531 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -629,7 +629,7 @@ static void show_local_changes(struct object *head, diff_setup_done(&rev.diffopt); add_pending_object(&rev, head, NULL); run_diff_index(&rev, 0); - object_array_clear(&rev.pending); + release_revisions(&rev); } static void describe_detached_head(const char *msg, struct commit *commit) diff --git a/builtin/stash.c b/builtin/stash.c index 3e8af210fde..af9b61ef17a 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1277,9 +1277,8 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps done: discard_index(&istate); - UNLEAK(rev); - object_array_clear(&rev.pending); clear_pathspec(&rev.prune_data); + release_revisions(&rev); strbuf_release(&diff_output); remove_path(stash_index_path.buf); return ret; diff --git a/diff-lib.c b/diff-lib.c index ca085a03efc..ad1dd4834f7 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -651,6 +651,7 @@ int index_differs_from(struct repository *r, { struct rev_info rev; struct setup_revision_opt opt; + unsigned int has_changes; repo_init_revisions(r, &rev, NULL); memset(&opt, 0, sizeof(opt)); @@ -662,8 +663,9 @@ int index_differs_from(struct repository *r, diff_flags_or(&rev.diffopt.flags, flags); rev.diffopt.ita_invisible_in_index = ita_invisible_in_index; run_diff_index(&rev, 1); - object_array_clear(&rev.pending); - return (rev.diffopt.flags.has_changes != 0); + has_changes = rev.diffopt.flags.has_changes; + release_revisions(&rev); + return (has_changes != 0); } static struct strbuf *idiff_prefix_cb(struct diff_options *opt, void *data) diff --git a/range-diff.c b/range-diff.c index 30a4de5c2d8..2d0cd271a9e 100644 --- a/range-diff.c +++ b/range-diff.c @@ -600,6 +600,6 @@ int is_range_diff_range(const char *arg) } free(copy); - object_array_clear(&revs.pending); + release_revisions(&revs); return negative > 0 && positive > 0; } diff --git a/revision.c b/revision.c index 5824fdeddfd..831f2cf977b 100644 --- a/revision.c +++ b/revision.c @@ -2926,6 +2926,13 @@ static void release_revisions_commit_list(struct rev_info *revs) revs->commits = NULL; } +void release_revisions(struct rev_info *revs) +{ + if (!revs) + return; + object_array_clear(&revs->pending); +} + static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) { struct commit_list *l = xcalloc(1, sizeof(*l)); diff --git a/revision.h b/revision.h index b9c2421687f..c28e901021d 100644 --- a/revision.h +++ b/revision.h @@ -370,6 +370,12 @@ void repo_init_revisions(struct repository *r, int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct setup_revision_opt *); +/** + * Free data allocated in a "struct rev_info" after it's been setup + * with repo_init_revisions() and setup_revisions(). + */ +void release_revisions(struct rev_info *revs); + void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx, const struct option *options, const char * const usagestr[]); diff --git a/wt-status.c b/wt-status.c index 335e723a71e..398d0951aca 100644 --- a/wt-status.c +++ b/wt-status.c @@ -653,7 +653,7 @@ static void wt_status_collect_changes_index(struct wt_status *s) rev.diffopt.rename_score = s->rename_score >= 0 ? s->rename_score : rev.diffopt.rename_score; copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_index(&rev, 1); - object_array_clear(&rev.pending); + release_revisions(&rev); clear_pathspec(&rev.prune_data); } @@ -2568,8 +2568,9 @@ int has_uncommitted_changes(struct repository *r, diff_setup_done(&rev_info.diffopt); result = run_diff_index(&rev_info, 1); - object_array_clear(&rev_info.pending); - return diff_result_code(&rev_info.diffopt, result); + result = diff_result_code(&rev_info.diffopt, result); + release_revisions(&rev_info); + return result; } /** From patchwork Wed Mar 9 13:16:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775062 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA0A5C433FE for ; Wed, 9 Mar 2022 13:18:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230349AbiCINTA (ORCPT ); Wed, 9 Mar 2022 08:19:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38206 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233054AbiCINSv (ORCPT ); Wed, 9 Mar 2022 08:18:51 -0500 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BBB87158E9D for ; Wed, 9 Mar 2022 05:17:50 -0800 (PST) Received: by mail-wm1-x329.google.com with SMTP id q20so1355996wmq.1 for ; Wed, 09 Mar 2022 05:17:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QWa2NJ81HmU2G6O6UgMIu0wm57xSooCjnEJncNuD+F4=; b=gDGn7VRfJodnsy9I+uHrcTQN6grszTg30pwxt1eiojNLHwQt1Pd1NaHxJ9/roFrymu giajtNM45H7r6HptzPhmT0PHx5JyXdusjrt2u1Sc2KsUR/GePCtTF1utQv8/Oluerl0G Ja4ehx0duXbNvcc8Us+8+x19wwO1GTh7yu636vDkU1uzemSTBAVjxjr/gi5NTcBkQTG7 RBZMmzm8Xi758DwU4nABc8R3hz0RlYbkdQtM5pE1z7AZ6lcJVaSu1inxbV6XD16dgksv mS7h0c+U6Z4XemNt8k9gFsq3QmBy7Y6N62wyYcS/z1afb9wFdoYIQCIEe1mOp5wn2H01 Iohg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QWa2NJ81HmU2G6O6UgMIu0wm57xSooCjnEJncNuD+F4=; b=vUYpD310F2nA7mfvjIA0aq1UaKrMb3NwtvpyVpSFQne94Hbt7BHpUk1MbsoWar2THH 3r/+NG6aPzNzH3oadH2IWDxU6XCCB8LsU8WcyDZDpoKcrDn0hwwb/FcgpOSsmEX3rNj2 Ygwg/akLCDg3Ouf7FL93MpobdSqWeM9n4rZZ+X8FY4ymOpB7uaNYOzmkeGIb+m9qumns +AJfyI5pz6HBawFjscsYN2tzxp9RVNwQPnHP6qewTIYx2B9ZkbWZTbafxVYrlDn9bRqu K1Hlvg6LhvqM/+jQChuXOmxQ31dTCI6XXFdQV5td8Il5RvrM3cHrxQDZ22lvDa/8QIDf uyPA== X-Gm-Message-State: AOAM533JxhJZ+QbA57EAtE6N46eAvpn9JvbzSdRdqIsw+HGMU4z6zJPI 8g5sZJHGBLY9uK3Cghgc6nLnRGDun9qd4g== X-Google-Smtp-Source: ABdhPJzDCVpsjzActPBDIIqhramtCPRwFUcAEnAtHqgDb1ZkCgwe/cUnD871YtQ3GmIgwBMXl+fZRg== X-Received: by 2002:a05:600c:1f15:b0:389:ab64:fe80 with SMTP id bd21-20020a05600c1f1500b00389ab64fe80mr7560087wmb.141.1646831868902; Wed, 09 Mar 2022 05:17:48 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:48 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 06/24] revisions API users: add straightforward release_revisions() Date: Wed, 9 Mar 2022 14:16:36 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add a release_revisions() to various users of "struct rev_list" in those straightforward cases where we only need to add the release_revisions() call to the end of a block, and don't need to e.g. refactor anything to use a "goto cleanup" pattern. Signed-off-by: Ævar Arnfjörð Bjarmason --- add-interactive.c | 1 + bisect.c | 2 ++ builtin/add.c | 1 + builtin/am.c | 3 +++ builtin/bisect--helper.c | 2 ++ builtin/blame.c | 1 + builtin/checkout.c | 1 + builtin/commit.c | 1 + builtin/describe.c | 2 ++ builtin/fast-export.c | 1 + builtin/merge.c | 2 ++ builtin/pack-objects.c | 2 ++ builtin/prune.c | 1 + builtin/reflog.c | 1 + builtin/shortlog.c | 2 ++ builtin/submodule--helper.c | 1 + fmt-merge-msg.c | 1 + merge-ort.c | 1 + merge-recursive.c | 1 + midx.c | 1 + pack-bitmap-write.c | 1 + ref-filter.c | 1 + remote.c | 1 + sequencer.c | 3 +++ shallow.c | 1 + submodule.c | 2 ++ t/helper/test-revision-walking.c | 1 + wt-status.c | 1 + 28 files changed, 39 insertions(+) diff --git a/add-interactive.c b/add-interactive.c index e1ab39cce30..13d5ec6f49f 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -568,6 +568,7 @@ static int get_modified_files(struct repository *r, if (ps) clear_pathspec(&rev.prune_data); + release_revisions(&rev); } hashmap_clear_and_free(&s.file_map, struct pathname_entry, ent); if (unmerged_count) diff --git a/bisect.c b/bisect.c index 9e6a2b7f201..cc6b8b6230d 100644 --- a/bisect.c +++ b/bisect.c @@ -884,6 +884,7 @@ static int check_ancestors(struct repository *r, int rev_nr, /* Clean up objects used, as they will be reused. */ clear_commit_marks_many(rev_nr, rev, ALL_REV_FLAGS); + release_revisions(&revs); return res; } @@ -964,6 +965,7 @@ static void show_diff_tree(struct repository *r, setup_revisions(ARRAY_SIZE(argv) - 1, argv, &opt, NULL); log_tree_commit(&opt, commit); + release_revisions(&opt); } /* diff --git a/builtin/add.c b/builtin/add.c index 3ffb86a4338..f507d2191cd 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -340,6 +340,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix) unlink(file); free(file); + release_revisions(&rev); return 0; } diff --git a/builtin/am.c b/builtin/am.c index 0f4111bafa0..93bec62afa9 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -1397,6 +1397,7 @@ static void write_commit_patch(const struct am_state *state, struct commit *comm add_pending_object(&rev_info, &commit->object, ""); diff_setup_done(&rev_info.diffopt); log_tree_commit(&rev_info, commit); + release_revisions(&rev_info); } /** @@ -1429,6 +1430,7 @@ static void write_index_patch(const struct am_state *state) add_pending_object(&rev_info, &tree->object, ""); diff_setup_done(&rev_info.diffopt); run_diff_index(&rev_info, 1); + release_revisions(&rev_info); } /** @@ -1582,6 +1584,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa add_pending_oid(&rev_info, "HEAD", &our_tree, 0); diff_setup_done(&rev_info.diffopt); run_diff_index(&rev_info, 1); + release_revisions(&rev_info); } if (run_apply(state, index_path)) diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c index 8b2b259ff0d..e4d7b6779ae 100644 --- a/builtin/bisect--helper.c +++ b/builtin/bisect--helper.c @@ -555,6 +555,7 @@ static int bisect_skipped_commits(struct bisect_terms *terms) reset_revision_walk(); strbuf_release(&commit_name); + release_revisions(&revs); fclose(fp); return 0; } @@ -1041,6 +1042,7 @@ static enum bisect_error bisect_skip(struct bisect_terms *terms, const char **ar oid_to_hex(&commit->object.oid)); reset_revision_walk(); + release_revisions(&revs); } else { strvec_push(&argv_state, argv[i]); } diff --git a/builtin/blame.c b/builtin/blame.c index 885b381ab83..24bac822c56 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1203,5 +1203,6 @@ int cmd_blame(int argc, const char **argv, const char *prefix) cleanup: cleanup_scoreboard(&sb); + release_revisions(&revs); return 0; } diff --git a/builtin/checkout.c b/builtin/checkout.c index ed993383531..93fe46c6424 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -1075,6 +1075,7 @@ static void orphaned_commit_warning(struct commit *old_commit, struct commit *ne /* Clean up objects used, as they will be reused. */ repo_clear_commit_marks(the_repository, ALL_REV_FLAGS); + release_revisions(&revs); } static int switch_branches(const struct checkout_opts *opts, diff --git a/builtin/commit.c b/builtin/commit.c index 8b8bdad3959..74388a6b9a1 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1120,6 +1120,7 @@ static const char *find_author_by_nickname(const char *name) strbuf_release(&buf); format_commit_message(commit, "%aN <%aE>", &buf, &ctx); clear_mailmap(&mailmap); + release_revisions(&revs); return strbuf_detach(&buf, NULL); } die(_("--author '%s' is not 'Name ' and matches no existing author"), name); diff --git a/builtin/describe.c b/builtin/describe.c index 42159cd26bd..a76f1a1a7a7 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -517,6 +517,7 @@ static void describe_blob(struct object_id oid, struct strbuf *dst) traverse_commit_list(&revs, process_commit, process_object, &pcd); reset_revision_walk(); + release_revisions(&revs); } static void describe(const char *arg, int last_one) @@ -667,6 +668,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix) suffix = NULL; else suffix = dirty; + release_revisions(&revs); } describe("HEAD", 1); } else if (dirty) { diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 510139e9b54..ade0120b3a8 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -1275,6 +1275,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix) printf("done\n"); refspec_clear(&refspecs); + release_revisions(&revs); return 0; } diff --git a/builtin/merge.c b/builtin/merge.c index a94a03384ae..e99549db6fd 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -443,6 +443,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead } write_file_buf(git_path_squash_msg(the_repository), out.buf, out.len); strbuf_release(&out); + release_revisions(&rev); } static void finish(struct commit *head_commit, @@ -992,6 +993,7 @@ static int evaluate_result(void) */ cnt += count_unmerged_entries(); + release_revisions(&rev); return cnt; } diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 178e611f09d..17194a58155 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -3384,6 +3384,7 @@ static void read_packs_list_from_stdin(void) strbuf_release(&buf); string_list_clear(&include_packs, 0); string_list_clear(&exclude_packs, 0); + release_revisions(&revs); } static void read_object_list_from_stdin(void) @@ -3799,6 +3800,7 @@ static void get_object_list(int ac, const char **av) if (unpack_unreachable) loosen_unused_packed_objects(); + release_revisions(&revs); oid_array_clear(&recent_objects); } diff --git a/builtin/prune.c b/builtin/prune.c index c2bcdc07db4..df376b2ed1e 100644 --- a/builtin/prune.c +++ b/builtin/prune.c @@ -196,5 +196,6 @@ int cmd_prune(int argc, const char **argv, const char *prefix) prune_shallow(show_only ? PRUNE_SHOW_ONLY : 0); } + release_revisions(&revs); return 0; } diff --git a/builtin/reflog.c b/builtin/reflog.c index 016466852f1..5d870b4f2d1 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -648,6 +648,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix) if (verbose) printf(_("Marking reachable objects...")); mark_reachable_objects(&revs, 0, 0, NULL); + release_revisions(&revs); if (verbose) putchar('\n'); } diff --git a/builtin/shortlog.c b/builtin/shortlog.c index 228d782754a..e609357bd23 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -420,6 +420,8 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix) else get_from_rev(&rev, &log); + release_revisions(&rev); + shortlog_output(&log); if (log.file != stdout) fclose(log.file); diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index d8638434dcb..7fbba812583 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1259,6 +1259,7 @@ static int compute_summary_module_list(struct object_id *head_oid, run_diff_files(&rev, 0); prepare_submodule_summary(info, &list); strvec_clear(&diff_args); + release_revisions(&rev); return 0; } diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c index baca57d5b64..f48f44f9cd1 100644 --- a/fmt-merge-msg.c +++ b/fmt-merge-msg.c @@ -699,6 +699,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out, shortlog(origins.items[i].string, origins.items[i].util, head, &rev, opts, out); + release_revisions(&rev); } strbuf_complete_line(out); diff --git a/merge-ort.c b/merge-ort.c index ff739d4b360..658c580ab91 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -1593,6 +1593,7 @@ static int find_first_merges(struct repository *repo, } object_array_clear(&merges); + release_revisions(&revs); return result->nr; } diff --git a/merge-recursive.c b/merge-recursive.c index 9ec1e6d043a..6296685d00b 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1160,6 +1160,7 @@ static int find_first_merges(struct repository *repo, } object_array_clear(&merges); + release_revisions(&revs); return result->nr; } diff --git a/midx.c b/midx.c index 865170bad05..702c8a9b178 100644 --- a/midx.c +++ b/midx.c @@ -1061,6 +1061,7 @@ static struct commit **find_commits_for_midx_bitmap(uint32_t *indexed_commits_nr if (indexed_commits_nr_p) *indexed_commits_nr_p = cb.commits_nr; + release_revisions(&revs); return cb.commits; } diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c index cab3eaa2acd..ea8e0b51cdf 100644 --- a/pack-bitmap-write.c +++ b/pack-bitmap-write.c @@ -326,6 +326,7 @@ static void bitmap_builder_init(struct bitmap_builder *bb, trace2_data_intmax("pack-bitmap-write", the_repository, "num_maximal_commits", num_maximal); + release_revisions(&revs); free_commit_list(reusable); } diff --git a/ref-filter.c b/ref-filter.c index 7838bd22b8d..a91688bbf17 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -2392,6 +2392,7 @@ static void reach_filter(struct ref_array *array, clear_commit_marks(merge_commit, ALL_REV_FLAGS); } + release_revisions(&revs); free(to_clear); } diff --git a/remote.c b/remote.c index c97c626eaa8..0a7d8757d99 100644 --- a/remote.c +++ b/remote.c @@ -2172,6 +2172,7 @@ static int stat_branch_pair(const char *branch_name, const char *base, clear_commit_marks(theirs, ALL_REV_FLAGS); strvec_clear(&argv); + release_revisions(&revs); return 1; } diff --git a/sequencer.c b/sequencer.c index 35006c0cea6..b15f8d1ff50 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1347,6 +1347,7 @@ void print_commit_summary(struct repository *r, log_tree_commit(&rev, commit); } + release_revisions(&rev); strbuf_release(&format); } @@ -3415,6 +3416,7 @@ static int make_patch(struct repository *r, unuse_commit_buffer(commit, commit_buffer); } strbuf_release(&buf); + release_revisions(&log_tree_opt); return res; } @@ -4527,6 +4529,7 @@ static int pick_commits(struct repository *r, &log_tree_opt.diffopt); log_tree_diff_flush(&log_tree_opt); } + release_revisions(&log_tree_opt); } flush_rewritten_pending(); if (!stat(rebase_path_rewritten_list(), &st) && diff --git a/shallow.c b/shallow.c index 71e5876f377..2552f139f61 100644 --- a/shallow.c +++ b/shallow.c @@ -261,6 +261,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av, if ((o->flags & both_flags) == both_flags) o->flags &= ~not_shallow_flag; } + release_revisions(&revs); return result; } diff --git a/submodule.c b/submodule.c index 5ace18a7d94..0510cb193b6 100644 --- a/submodule.c +++ b/submodule.c @@ -902,9 +902,11 @@ static void collect_changed_submodules(struct repository *r, diff_rev.diffopt.format_callback_data = &data; diff_rev.dense_combined_merges = 1; diff_tree_combined_merge(commit, &diff_rev); + release_revisions(&diff_rev); } reset_revision_walk(); + release_revisions(&rev); } static void free_submodules_oids(struct string_list *submodules) diff --git a/t/helper/test-revision-walking.c b/t/helper/test-revision-walking.c index 625b2dbf822..4a45d5bac2a 100644 --- a/t/helper/test-revision-walking.c +++ b/t/helper/test-revision-walking.c @@ -43,6 +43,7 @@ static int run_revision_walk(void) } reset_revision_walk(); + release_revisions(&rev); return got_revision; } diff --git a/wt-status.c b/wt-status.c index 398d0951aca..a68731ea0f7 100644 --- a/wt-status.c +++ b/wt-status.c @@ -1143,6 +1143,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s) rev.diffopt.b_prefix = "w/"; run_diff_files(&rev, 0); } + release_revisions(&rev); } static void wt_longstatus_print_tracking(struct wt_status *s) From patchwork Wed Mar 9 13:16:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775063 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E5C37C433F5 for ; Wed, 9 Mar 2022 13:18:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233074AbiCINTG (ORCPT ); Wed, 9 Mar 2022 08:19:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38210 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233068AbiCINSv (ORCPT ); Wed, 9 Mar 2022 08:18:51 -0500 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3DFB1637F0 for ; Wed, 9 Mar 2022 05:17:51 -0800 (PST) Received: by mail-wr1-x430.google.com with SMTP id u1so2961417wrg.11 for ; Wed, 09 Mar 2022 05:17:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uD9FgiY8oCj+2DwwMEWyNZHNclVVCUfMr9Vm3LOZmaY=; b=ntDL4+ECXwCUT0xc8WypY/F/PbdT5WHIY1sXdXncD70YuRdBEh85i6gJBOIQ5SkFBK c57sohhABXN38nCeWpo2mPfQJKsdFrDLwMLJP0o46Njz4ituvVc2PGBCKOj1QhvrbmNv CWc0JOwZIolax7SKQvxsRWC5uhJPLiuF5ZePu4Ymqhfkoqeqs2uiusL3+pMP7KFf2n3P W55cniMeASR3E+tZM744HLY5l7uBUyA6YiFP6cUAYlpN1AC21Gjn3i0VX+tgauCir1Lu As9wmCX52VmE8hsZYnCa6LuFRldozPd4QeJV7g+hC7txEFIn50I/oRJAX178tIAM6wIN vMUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uD9FgiY8oCj+2DwwMEWyNZHNclVVCUfMr9Vm3LOZmaY=; b=ZlCf5kHun4COuRHtzjTaUBVRvHNqUoSIsWPdOZA/xAZGqlJ2cRyZxC2ifvKB5ztgD0 mn8Z1RP2ql3qu/CbffKhW/1fK5Mcw9YMfFdHLtloETsL4mJ+6sxkei8SGJjvtLS9D2KB eY5KrxJ6/DOxUI1JuQ6hX81tNsT3G3UItAmBtTBMIWek6ku2l7aAB/8NvXMYMq5tApWD PFUMJDtKWBiJRD9HKzBKQAdYmewYzdXAxllA5r201UHM44WBy/l3opC/u/Z5hG1azr6R froKtG7P7oA2Yyn0dfRJ49B33Oxu2wJTSk+SSCQGuKA+Rw6L3PDsaI+tVsgxdbbacRg1 0Z7Q== X-Gm-Message-State: AOAM5322OF2kS1qtO/H+lzirfRtwzMsfEfULJWaqbVgvRl+GXvi9Lkqc 8CDlQdFtq7IT2T1EUhszP63kfej6tx2B7Q== X-Google-Smtp-Source: ABdhPJw4he/zmpAETTbuEP8gGjJJABaFdFEyUhEBP7Fdv3xtmS48CJtMzj6Wt3zOploHY8YI7YJXgA== X-Received: by 2002:a5d:59a5:0:b0:1f0:bf:64c9 with SMTP id p5-20020a5d59a5000000b001f000bf64c9mr15897932wrr.352.1646831869948; Wed, 09 Mar 2022 05:17:49 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:49 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 07/24] revisions API users: use release_revisions() needing "{ 0 }" init Date: Wed, 9 Mar 2022 14:16:37 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Use release_revisions() to various users of "struct rev_list" which need to have their "struct rev_info" zero-initialized before we can start using it. In all of these cases we might "goto cleanup" (or equivalent), For the bundle.c code see the early exit case added in 3bbbe467f29 (bundle verify: error out if called without an object database, 2019-05-27). For the relevant bisect.c code see 45b6370812c (bisect: libify `check_good_are_ancestors_of_bad` and its dependents, 2020-02-17). Signed-off-by: Ævar Arnfjörð Bjarmason --- bisect.c | 18 ++++++++++++------ builtin/submodule--helper.c | 3 ++- bundle.c | 12 ++++++++---- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/bisect.c b/bisect.c index cc6b8b6230d..159a4b644df 100644 --- a/bisect.c +++ b/bisect.c @@ -1010,7 +1010,7 @@ void read_bisect_terms(const char **read_bad, const char **read_good) */ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) { - struct rev_info revs; + struct rev_info revs = { 0 }; struct commit_list *tried; int reaches = 0, all = 0, nr, steps; enum bisect_error res = BISECT_OK; @@ -1035,7 +1035,7 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) res = check_good_are_ancestors_of_bad(r, prefix, no_checkout); if (res) - return res; + goto cleanup; bisect_rev_setup(r, &revs, prefix, "%s", "^%s", 1); @@ -1060,14 +1060,16 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) term_good, term_bad); - return BISECT_FAILED; + res = BISECT_FAILED; + goto cleanup; } if (!all) { fprintf(stderr, _("No testable commit found.\n" "Maybe you started with bad path arguments?\n")); - return BISECT_NO_TESTABLE_COMMIT; + res = BISECT_NO_TESTABLE_COMMIT; + goto cleanup; } bisect_rev = &revs.commits->item->object.oid; @@ -1087,7 +1089,8 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) * for negative return values for early returns up * until the cmd_bisect__helper() caller. */ - return BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND; + res = BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND; + goto cleanup; } nr = all - reaches - 1; @@ -1106,7 +1109,10 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) /* Clean up objects used, as they will be reused. */ repo_clear_commit_marks(r, ALL_REV_FLAGS); - return bisect_checkout(bisect_rev, no_checkout); + res = bisect_checkout(bisect_rev, no_checkout); +cleanup: + release_revisions(&revs); + return res; } static inline int log2i(int n) diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 7fbba812583..09db2620829 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -756,7 +756,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid, { char *displaypath; struct strvec diff_files_args = STRVEC_INIT; - struct rev_info rev; + struct rev_info rev = { 0 }; int diff_files_result; struct strbuf buf = STRBUF_INIT; const char *git_dir; @@ -843,6 +843,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid, cleanup: strvec_clear(&diff_files_args); free(displaypath); + release_revisions(&rev); } static void status_submodule_cb(const struct cache_entry *list_item, diff --git a/bundle.c b/bundle.c index a0bb687b0f4..207541a3410 100644 --- a/bundle.c +++ b/bundle.c @@ -191,14 +191,16 @@ int verify_bundle(struct repository *r, * to be verbose about the errors */ struct string_list *p = &header->prerequisites; - struct rev_info revs; + struct rev_info revs = { 0 }; const char *argv[] = {NULL, "--all", NULL}; struct commit *commit; int i, ret = 0, req_nr; const char *message = _("Repository lacks these prerequisite commits:"); - if (!r || !r->objects || !r->objects->odb) - return error(_("need a repository to verify a bundle")); + if (!r || !r->objects || !r->objects->odb) { + ret = error(_("need a repository to verify a bundle")); + goto cleanup; + } repo_init_revisions(r, &revs, NULL); for (i = 0; i < p->nr; i++) { @@ -216,7 +218,7 @@ int verify_bundle(struct repository *r, error("%s %s", oid_to_hex(oid), name); } if (revs.pending.nr != p->nr) - return ret; + goto cleanup; req_nr = revs.pending.nr; setup_revisions(2, argv, &revs, NULL); @@ -270,6 +272,8 @@ int verify_bundle(struct repository *r, list_refs(r, 0, NULL); } } +cleanup: + release_revisions(&revs); return ret; } From patchwork Wed Mar 9 13:16:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775064 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F2600C433EF for ; Wed, 9 Mar 2022 13:18:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233096AbiCINTH (ORCPT ); Wed, 9 Mar 2022 08:19:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38342 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233075AbiCINSx (ORCPT ); Wed, 9 Mar 2022 08:18:53 -0500 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 883DC172897 for ; Wed, 9 Mar 2022 05:17:52 -0800 (PST) Received: by mail-wr1-x42e.google.com with SMTP id r6so2555599wrr.2 for ; Wed, 09 Mar 2022 05:17:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HbIu89yx4fnXUQ06a6bq+jDu7ElJQI28xQaa1EcIf3Y=; b=oEAsN+LbJsJXUKomB6QE6GhE+Ly7otJOVs/Bx5vnAAleTx42jRHb/0nNbxiaVlVZKh ztY+Ygnxv00YEzPS+dn2hjfZ/wRBGvTpOwjQ5heWoBnUVIYyv4/Iq3ut9vzC7UJM0/Mn ggazJxtsM5fNYlCO1KN6B49uLtY7K2mMBKMpLvbjOTktVyzd2HXQ+uxC9sDxgBDC9br5 mvYUbs1vhXU2/HksDBFIdhdJza9mHkDkCiBWAmEpMeC8E5eaW/IT5GYOZ4Ojf4ajNmqK q95HrZCqUGCGXPUgoNKNA48N03SJ+CLIVXmbMcBD/JKTahe/xazo4H0+8vTqCyRtRgph d5ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HbIu89yx4fnXUQ06a6bq+jDu7ElJQI28xQaa1EcIf3Y=; b=ouAJMZ6ZPRB0v49B6hCtEyvBAaFZmtsofxY+hTSlz1/pkeDwmWBzdiEwIhfoOm66Od t5tCJnoCPu05SyV3sw/PoD5iSe6PJMXVTHVmyvIFUqW9vx14hsdYnS3OPsFJu+546slO 4pVpWf1DRVODkwv8pOVPjibXp9t1mj+42kFC+VI+hUGhc0K4SlSPtrLORRzNaGZP4YhX +ACi3RO/te0RPQRoa8wzUh7rqF9m595oBHUzmqIp4hxXCNq+FM/qMwoBWIjQ0cUxJ8J2 duUpMRWf3jP4FVkkhY/ib3MDC/Im0KgfoWhJrVQyRUQ3AUcsj/zan/M8cSCpN4QmajZU SLjQ== X-Gm-Message-State: AOAM5331+aNHoDBxRs8E0jVqzAQhegiZ+R1tswxMvhcVFFGFFj+U27b2 q5bsUWjAo/ZirTnqHoes9799mOT3XGKpmg== X-Google-Smtp-Source: ABdhPJxeG0VXC24e9eFIXoQHZDwIL1b9YHvY4IjBVrUuET5DJhIdBwLQGHrfV0ICOMi2Cjg0XQRawQ== X-Received: by 2002:adf:fa48:0:b0:1f0:d71:f9a with SMTP id y8-20020adffa48000000b001f00d710f9amr15284590wrr.50.1646831870736; Wed, 09 Mar 2022 05:17:50 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:50 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 08/24] revisions API users: add "goto cleanup" for release_revisions() Date: Wed, 9 Mar 2022 14:16:38 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add a release_revisions() to various users of "struct rev_list" which requires a minor refactoring to a "goto cleanup" pattern to use that function. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/diff-files.c | 8 ++++++-- builtin/rev-list.c | 19 ++++++++++++------- builtin/stash.c | 14 ++++++++++---- builtin/submodule--helper.c | 11 ++++++++--- sequencer.c | 23 ++++++++++++++++------- t/helper/test-fast-rebase.c | 19 +++++++++++++------ 6 files changed, 65 insertions(+), 29 deletions(-) diff --git a/builtin/diff-files.c b/builtin/diff-files.c index 70103c40952..92cf6e1e922 100644 --- a/builtin/diff-files.c +++ b/builtin/diff-files.c @@ -77,8 +77,12 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix) if (read_cache_preload(&rev.diffopt.pathspec) < 0) { perror("read_cache_preload"); - return -1; + result = -1; + goto cleanup; } result = run_diff_files(&rev, options); - return diff_result_code(&rev.diffopt, result); + result = diff_result_code(&rev.diffopt, result); +cleanup: + release_revisions(&rev); + return result; } diff --git a/builtin/rev-list.c b/builtin/rev-list.c index 38528c7f156..5db8e71645f 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -506,6 +506,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) int use_bitmap_index = 0; int filter_provided_objects = 0; const char *show_progress = NULL; + int ret = 0; if (argc == 2 && !strcmp(argv[1], "-h")) usage(rev_list_usage); @@ -589,7 +590,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) } if (!strcmp(arg, "--test-bitmap")) { test_bitmap_walk(&revs); - return 0; + goto cleanup; } if (skip_prefix(arg, "--progress=", &arg)) { show_progress = arg; @@ -689,11 +690,11 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) if (use_bitmap_index) { if (!try_bitmap_count(&revs, &filter_options, filter_provided_objects)) - return 0; + goto cleanup; if (!try_bitmap_disk_usage(&revs, &filter_options, filter_provided_objects)) - return 0; + goto cleanup; if (!try_bitmap_traversal(&revs, &filter_options, filter_provided_objects)) - return 0; + goto cleanup; } if (prepare_revision_walk(&revs)) @@ -713,8 +714,10 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) find_bisection(&revs.commits, &reaches, &all, bisect_flags); - if (bisect_show_vars) - return show_bisect_vars(&info, reaches, all); + if (bisect_show_vars) { + ret = show_bisect_vars(&info, reaches, all); + goto cleanup; + } } if (filter_provided_objects) { @@ -769,5 +772,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) if (show_disk_usage) printf("%"PRIuMAX"\n", (uintmax_t)total_disk_usage); - return 0; +cleanup: + release_revisions(&revs); + return ret; } diff --git a/builtin/stash.c b/builtin/stash.c index af9b61ef17a..0b9d55d09bb 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -874,8 +874,10 @@ static int show_stash(int argc, const char **argv, const char *prefix) ret = get_stash_info(&info, stash_args.nr, stash_args.v); strvec_clear(&stash_args); - if (ret) - return -1; + if (ret) { + ret = -1; + goto cleanup; + } /* * The config settings are applied only if there are not passed @@ -890,7 +892,8 @@ static int show_stash(int argc, const char **argv, const char *prefix) if (!show_stat && !show_patch) { free_stash_info(&info); - return 0; + ret = 0; + goto cleanup; } } @@ -924,7 +927,10 @@ static int show_stash(int argc, const char **argv, const char *prefix) log_tree_diff_flush(&rev); free_stash_info(&info); - return diff_result_code(&rev.diffopt, 0); + ret = diff_result_code(&rev.diffopt, 0); +cleanup: + release_revisions(&rev); + return ret; } static int do_store_stash(const struct object_id *w_commit, const char *stash_msg, diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 09db2620829..19393da4e31 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1222,6 +1222,7 @@ static int compute_summary_module_list(struct object_id *head_oid, struct strvec diff_args = STRVEC_INIT; struct rev_info rev; struct module_cb_list list = MODULE_CB_LIST_INIT; + int ret = 0; strvec_push(&diff_args, get_diff_cmd(diff_cmd)); if (info->cached) @@ -1247,11 +1248,13 @@ static int compute_summary_module_list(struct object_id *head_oid, setup_work_tree(); if (read_cache_preload(&rev.diffopt.pathspec) < 0) { perror("read_cache_preload"); - return -1; + ret = -1; + goto cleanup; } } else if (read_cache() < 0) { perror("read_cache"); - return -1; + ret = -1; + goto cleanup; } if (diff_cmd == DIFF_INDEX) @@ -1259,9 +1262,11 @@ static int compute_summary_module_list(struct object_id *head_oid, else run_diff_files(&rev, 0); prepare_submodule_summary(info, &list); + ret = 0; +cleanup: strvec_clear(&diff_args); release_revisions(&rev); - return 0; + return ret; } static int module_summary(int argc, const char **argv, const char *prefix) diff --git a/sequencer.c b/sequencer.c index b15f8d1ff50..40d41c09523 100644 --- a/sequencer.c +++ b/sequencer.c @@ -5356,6 +5356,7 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, int rebase_merges = flags & TODO_LIST_REBASE_MERGES; int reapply_cherry_picks = flags & TODO_LIST_REAPPLY_CHERRY_PICKS; int skipped_commit = 0; + int ret = 0; repo_init_revisions(r, &revs, NULL); revs.verbose_header = 1; @@ -5379,14 +5380,20 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, pp.fmt = revs.commit_format; pp.output_encoding = get_log_output_encoding(); - if (setup_revisions(argc, argv, &revs, NULL) > 1) - return error(_("make_script: unhandled options")); + if (setup_revisions(argc, argv, &revs, NULL) > 1) { + ret = error(_("make_script: unhandled options")); + goto cleanup; + } - if (prepare_revision_walk(&revs) < 0) - return error(_("make_script: error preparing revisions")); + if (prepare_revision_walk(&revs) < 0) { + ret = error(_("make_script: error preparing revisions")); + goto cleanup; + } - if (rebase_merges) - return make_script_with_merges(&pp, &revs, out, flags); + if (rebase_merges) { + ret = make_script_with_merges(&pp, &revs, out, flags); + goto cleanup; + } while ((commit = get_revision(&revs))) { int is_empty = is_original_commit_empty(commit); @@ -5410,7 +5417,9 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, if (skipped_commit) advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS, _("use --reapply-cherry-picks to include skipped commits")); - return 0; +cleanup: + release_revisions(&revs); + return ret; } /* diff --git a/t/helper/test-fast-rebase.c b/t/helper/test-fast-rebase.c index 993b90eaedd..e49a0244836 100644 --- a/t/helper/test-fast-rebase.c +++ b/t/helper/test-fast-rebase.c @@ -99,6 +99,7 @@ int cmd__fast_rebase(int argc, const char **argv) struct merge_result result; struct strbuf reflog_msg = STRBUF_INIT; struct strbuf branch_name = STRBUF_INIT; + int ret = 0; /* * test-tool stuff doesn't set up the git directory by default; need to @@ -137,13 +138,17 @@ int cmd__fast_rebase(int argc, const char **argv) revs.topo_order = 1; strvec_pushl(&rev_walk_args, "", argv[4], "--not", argv[3], NULL); - if (setup_revisions(rev_walk_args.nr, rev_walk_args.v, &revs, NULL) > 1) - return error(_("unhandled options")); + if (setup_revisions(rev_walk_args.nr, rev_walk_args.v, &revs, NULL) > 1) { + ret = error(_("unhandled options")); + goto cleanup; + } strvec_clear(&rev_walk_args); - if (prepare_revision_walk(&revs) < 0) - return error(_("error preparing revisions")); + if (prepare_revision_walk(&revs) < 0) { + ret = error(_("error preparing revisions")); + goto cleanup; + } init_merge_options(&merge_opt, the_repository); memset(&result, 0, sizeof(result)); @@ -219,8 +224,10 @@ int cmd__fast_rebase(int argc, const char **argv) if (write_locked_index(&the_index, &lock, COMMIT_LOCK | SKIP_IF_UNCHANGED)) die(_("unable to write %s"), get_index_file()); - + ret = (result.clean == 0); +cleanup: strbuf_release(&reflog_msg); strbuf_release(&branch_name); - return (result.clean == 0); + release_revisions(&revs); + return ret; } From patchwork Wed Mar 9 13:16:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775066 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6E6A9C433F5 for ; Wed, 9 Mar 2022 13:18:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233116AbiCINT1 (ORCPT ); Wed, 9 Mar 2022 08:19:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233084AbiCINTE (ORCPT ); Wed, 9 Mar 2022 08:19:04 -0500 Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 843D11728A9 for ; Wed, 9 Mar 2022 05:17:53 -0800 (PST) Received: by mail-wm1-x335.google.com with SMTP id bg31-20020a05600c3c9f00b00381590dbb33so1439459wmb.3 for ; Wed, 09 Mar 2022 05:17:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lLpiAwyfJn3k1peF3LyTYU4bHg9qPPSRHcITBovIYDE=; b=CFaSTdJu+TCU7UdCqY1aDiBK7bX8OINBFOh2PSZaeCkmJZ9Z3C4A5+SiCTBomWd3uG zoJ9NI1fa2aiXB1dcbNVTFMPuuXAvGSQlwIwOtbcBtfH/TMIQd5Gzcu5I/dixAXuWZnF SmTy5aPsxpGCoqhCmmlOhiYXRuoaLJaJ2HB0rdS7H0X+M75zXhI05rzIiXQUnCS55GfI 4YGvYQ9VG+KLDuDsr5ZQLB9YtVu46Cpg3coY4jwko2iep9xosKiWYizo1Ttlzc1gH+pN VrFcSVZBpDjO9ZwDqxcVF/8Cap3KPrLKPh8QQ5rrLZaEz8UlreQUMBqVFqa3ud04VKpD tB9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lLpiAwyfJn3k1peF3LyTYU4bHg9qPPSRHcITBovIYDE=; b=OWpEYUzvcYZIrhosh+mlWJBxWs50/ZGk203lg7FFjU5aEgumIdd3G96NgtCE4G3FJP zYcPmkC4oTS94VHrPR9YtJrNMoTIFi1Zu/7RRUNVnwAAkktTDTLGuhC0AFWRy2N81FEC b3K3GHxwt0N6gncT+wAq0AWA0RVu3Nh5Xv1CwS3f/ICo4ijOYhUrqPlzvUTFfL20bLiJ b9GEN77GsiCT0azEBjGjwl+6lUmrmwnOjt4kiba1wnx+SyegsDdrWDBW+oHPOYlgVad5 j0veBkLhCW44ZsduOH6KpZdG/+Y/1t84RKY50YK6QQHUU3TBW9aCHQEHUhuGGU8bBZRj ynJw== X-Gm-Message-State: AOAM530GYzcwhIGyfyM9XJAJRU1x0NtrMYDPFVvpf+DChit6CvmRdHo3 gJwiH2rA3ggxFWsNgvWnbOAFaEZtzJdU0g== X-Google-Smtp-Source: ABdhPJzYEdAIk6mItRCpoHvg7OeK5Dy83mw8zXm7N7u55JwgAfK8uYzk4Wo+l83LkLv/JNJiU0j/+w== X-Received: by 2002:a1c:2bc3:0:b0:381:3dd5:5707 with SMTP id r186-20020a1c2bc3000000b003813dd55707mr7380962wmr.31.1646831871727; Wed, 09 Mar 2022 05:17:51 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:51 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 09/24] revisions API users: use release_revisions() in http-push.c Date: Wed, 9 Mar 2022 14:16:39 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org In the case of cmd_main() in http-push.c we need to move the deceleration of the "struct rev-list" into the loop over the "remote_refs" when adding a release_revisions(). We'd previously set up the "revs" for each remote, but would potentially leak memory on each one. Signed-off-by: Ævar Arnfjörð Bjarmason --- http-push.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/http-push.c b/http-push.c index 3309aaf004a..8c18f01bb60 100644 --- a/http-push.c +++ b/http-push.c @@ -1689,7 +1689,6 @@ int cmd_main(int argc, const char **argv) struct refspec rs = REFSPEC_INIT_PUSH; struct remote_lock *ref_lock = NULL; struct remote_lock *info_ref_lock = NULL; - struct rev_info revs; int delete_branch = 0; int force_delete = 0; int objects_to_send; @@ -1825,6 +1824,7 @@ int cmd_main(int argc, const char **argv) new_refs = 0; for (ref = remote_refs; ref; ref = ref->next) { + struct rev_info revs; struct strvec commit_argv = STRVEC_INIT; if (!ref->peer_ref) @@ -1941,6 +1941,7 @@ int cmd_main(int argc, const char **argv) unlock_remote(ref_lock); check_locks(); strvec_clear(&commit_argv); + release_revisions(&revs); } /* Update remote server info if appropriate */ From patchwork Wed Mar 9 13:16:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775065 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7B83AC433EF for ; Wed, 9 Mar 2022 13:18:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233121AbiCINTZ (ORCPT ); Wed, 9 Mar 2022 08:19:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233079AbiCINSy (ORCPT ); Wed, 9 Mar 2022 08:18:54 -0500 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5C797178688 for ; Wed, 9 Mar 2022 05:17:54 -0800 (PST) Received: by mail-wm1-x32e.google.com with SMTP id l1-20020a05600c4f0100b00389645443d2so1455942wmq.2 for ; Wed, 09 Mar 2022 05:17:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=v5ohsgUvXlHYOPZEEGG9KEDVSVvA5NkI0oWq+RxUdGI=; b=e0BNeWbtEcS2NiGmQ3suhC4VgbVfpvZcOYELJWDkHxU/EmuWAzDV658Rd7ZKOvEkwg vykB4Y/V0AzzBX9OLVf6zMT6fpkb9/6dMeLuAS2zDkKfeTAR5/fq8rUQ6I7K1IP9LlRf oRyjb1jcHKaUcHYlF03fi/4Nr6irfljN5hM2J76JNr9uBZjXpYW1M6abjvok+FOIhxWy uPj93n4om9+k5t4qKqrfXTc3TI62uT6MO9k1H/h8hdHJFAcLQs5Rhp2q++EEhY04TyBB Ncj0aa4jPmhOBfTmtkLN2NeOb50OSxhMo+j9ysET9asJXsw4Q97j7CtsSdiX9OyCRh1v KWBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=v5ohsgUvXlHYOPZEEGG9KEDVSVvA5NkI0oWq+RxUdGI=; b=lKEwQB4he751elwNi0Nsi6Q5Jjh4VLHX9WRe7JxODYv+HbwGx2cunpBdn2SrSZaty2 FxZtMYcMaHSZu3+unXZdBP7hWCgrHALWVzngJujQ99nD96oamij/IBHsPXs5+M1UCLUT wTkp0rMWzoBd5DfXq5699wivz8TOzKL+TldHLT1YcCG7FFyoY3rN2gO9CoIEPhAZTVlq r0T52AhzYW92w/prm0vTnhwZ73HsTlnEQoAWiXddQ3up/6iiReE90U9DzTaydNTxZuOa g88J4JCX9n7btyYKBLgiPPKX1cbiOf2NFBeTgd84bKsZlVJhj+yjNUzXTCMKEevGfR5o ZSBg== X-Gm-Message-State: AOAM533ydzRsefGxdidF8TChw4PCmJA624d4o9TWSYVW8OWIUIBVgo+f Yx3iVADOxnZjYA4lz+qMAgHKd9AridB//A== X-Google-Smtp-Source: ABdhPJx+p4f6prqJOlDc97z1wP3AUxjFUgiTSukhzQ7tEz3HCGaiOzChAFd3/DTZ4usMybKqoePATQ== X-Received: by 2002:a05:600c:1d1b:b0:389:d0a5:c7c4 with SMTP id l27-20020a05600c1d1b00b00389d0a5c7c4mr2573591wms.88.1646831872677; Wed, 09 Mar 2022 05:17:52 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:52 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 10/24] revisions API users: use release_revisions() in builtin/log.c Date: Wed, 9 Mar 2022 14:16:40 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org In preparation for having the "log" family of functions make wider use of release_revisions() let's have them call it just before exiting. This changes the "log", "whatchanged", "show", "format-patch", etc. commands, all of which live in this file. The release_revisions() API still only frees the "pending" member, but will learn to more members of "struct rev_info" in subsequent commits. In the case of "format-patch" revert the addition of UNLEAK() in dee839a2633 (format-patch: mark rev_info with UNLEAK, 2021-12-16), and which will cause several tests that previously passed under "TEST_PASSES_SANITIZE_LEAK=true" to start failing. In subsequent commits we'll now be able to use those tests to check whether that part of the API is really leaking memory, and will fix all of those memory leaks. Removing the UNLEAK() allows us to make incremental progress in that direction. See [1] for further details about this approach. 1. https://lore.kernel.org/git/220218.861r00ib86.gmgdl@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/log.c | 20 ++++++++++++-------- t/t4126-apply-empty.sh | 2 -- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/builtin/log.c b/builtin/log.c index 00846c2c8ac..3c1edc27605 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -294,6 +294,12 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix, cmd_log_init_finish(argc, argv, prefix, rev, opt); } +static int cmd_log_deinit(int ret, struct rev_info *rev) +{ + release_revisions(rev); + return ret; +} + /* * This gives a rough estimate for how many commits we * will print out in the list. @@ -557,7 +563,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix) cmd_log_init(argc, argv, prefix, &rev, &opt); if (!rev.diffopt.output_format) rev.diffopt.output_format = DIFF_FORMAT_RAW; - return cmd_log_walk(&rev); + return cmd_log_deinit(cmd_log_walk(&rev), &rev); } static void show_tagger(const char *buf, struct rev_info *rev) @@ -676,7 +682,7 @@ int cmd_show(int argc, const char **argv, const char *prefix) cmd_log_init(argc, argv, prefix, &rev, &opt); if (!rev.no_walk) - return cmd_log_walk(&rev); + return cmd_log_deinit(cmd_log_walk(&rev), &rev); count = rev.pending.nr; objects = rev.pending.objects; @@ -731,8 +737,7 @@ int cmd_show(int argc, const char **argv, const char *prefix) ret = error(_("unknown type: %d"), o->type); } } - free(objects); - return ret; + return cmd_log_deinit(ret, &rev); } /* @@ -760,7 +765,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix) rev.always_show_header = 1; cmd_log_init_finish(argc, argv, prefix, &rev, &opt); - return cmd_log_walk(&rev); + return cmd_log_deinit(cmd_log_walk(&rev), &rev); } static void log_setup_revisions_tweak(struct rev_info *rev, @@ -791,7 +796,7 @@ int cmd_log(int argc, const char **argv, const char *prefix) opt.revarg_opt = REVARG_COMMITTISH; opt.tweak = log_setup_revisions_tweak; cmd_log_init(argc, argv, prefix, &rev, &opt); - return cmd_log_walk(&rev); + return cmd_log_deinit(cmd_log_walk(&rev), &rev); } /* format-patch */ @@ -2290,8 +2295,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) string_list_clear(rev.ref_message_ids, 0); free(rev.ref_message_ids); } - UNLEAK(rev); - return 0; + return cmd_log_deinit(0, &rev); } static int add_pending_commit(const char *arg, struct rev_info *revs, int flags) diff --git a/t/t4126-apply-empty.sh b/t/t4126-apply-empty.sh index 33860d38290..66a7ba8ab8f 100755 --- a/t/t4126-apply-empty.sh +++ b/t/t4126-apply-empty.sh @@ -2,8 +2,6 @@ test_description='apply empty' - -TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' From patchwork Wed Mar 9 13:16:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775067 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F566C433F5 for ; Wed, 9 Mar 2022 13:18:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233125AbiCINTa (ORCPT ); Wed, 9 Mar 2022 08:19:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39348 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233088AbiCINTF (ORCPT ); Wed, 9 Mar 2022 08:19:05 -0500 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6AC8D1786A3 for ; Wed, 9 Mar 2022 05:17:55 -0800 (PST) Received: by mail-wm1-x32a.google.com with SMTP id n33-20020a05600c3ba100b003832caf7f3aso2932293wms.0 for ; Wed, 09 Mar 2022 05:17:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mHiJnIvrZHx+9imn0V7zl5eJcSDu7XGSWtF+N+CTu7w=; b=C5ZNQ2U/aXabCiAPD6etzCSu2w4wzYcmCMJDeCbKqdi3uatGgGA/Ai5PfyarrnMWba my2v5+1gH/+Kw0Gvu0/0bH8iUGlE6ZnklZe0wURlh08OTjrvj/l8ia+xsiqItClq85hF y7IQ8tgu2SKKaSy9yOv4iKuToi2+m1xdYEEMdPJE1ZTKwdladoyllLl8CqMagDV2Cvpf AAkLSWDMur9sELqUFc3yXIJsWNaB0dAlrAnz/9TP7e+z69oiDZuiEfKZgZBwWQrFPjKx vMuNlENwYmSBoJxBguPLzvlLjwBv87uFF9CbZ6OGFy5IRHFskgB6kZLh+lB/UqDCyi4D pvWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mHiJnIvrZHx+9imn0V7zl5eJcSDu7XGSWtF+N+CTu7w=; b=nXqmPTm4Nv0y8QnKJk+XpDjzKyV6urfjSp0Qbk+Au8VVE9Ex9BGC9zXgbcw4MW94yl XSxbjUuqzy/8kag/2G2zRqh6mX++tdBgeo1YZ38VxGF2AVhU90zZyDQCqbgBayr3jjAX 7yG8Fj6GSPvO6QZYeqaj3VjeLfRgFySOToYyvA0uKFyZd9d3tF4SFoDbiACSq/15naoH ofG9M+3xATBIJBF8t/0bp61m1ulzdB5IOwLUbVN9lO71Y5xxk30pj20EMF9MlWMZAC6D ShE5k+ImkbgnfxTjS7VpqB91lBBcwnrc9YGTmCISfb0c45NSz5s4ZcNFHekkRzM3kaeT L6AQ== X-Gm-Message-State: AOAM5331cdU+KbQi5c7IzsMnJsmF/oiUBjng0Fl068rrv81GjUptBv1q koyC+K5DN1BXcGLGlQXmLmfzCX0CfU0HKg== X-Google-Smtp-Source: ABdhPJzuoX8XfJaW/ooahb/QXKU9ILVqg0PjfZqiQJMnWBVM3oscoVHF95W75tkQw91GncYmSa/psA== X-Received: by 2002:a05:600c:4307:b0:389:4f8f:f189 with SMTP id p7-20020a05600c430700b003894f8ff189mr3297972wme.29.1646831873627; Wed, 09 Mar 2022 05:17:53 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:52 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 11/24] revisions API users: use release_revisions() with UNLEAK() Date: Wed, 9 Mar 2022 14:16:41 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Use a release_revisions() with those "struct rev_list" users which already "UNLEAK" the struct. It may seem odd to simultaneously attempt to free() memory, but also to explicitly ignore whether we have memory leaks in the same. As explained in preceding commits this is being done to use the built-in commands as a guinea pig for whether the release_revisions() function works as expected, we'd like to test e.g. whether we segfault as we change it. In subsequent commits we'll then remove these UNLEAK() as the function is made to free the memory that caused us to add them in the first place. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/diff-index.c | 4 +++- builtin/diff.c | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/builtin/diff-index.c b/builtin/diff-index.c index 5fd23ab5b6c..3a83183c312 100644 --- a/builtin/diff-index.c +++ b/builtin/diff-index.c @@ -71,5 +71,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix) } result = run_diff_index(&rev, option); UNLEAK(rev); - return diff_result_code(&rev.diffopt, result); + result = diff_result_code(&rev.diffopt, result); + release_revisions(&rev); + return result; } diff --git a/builtin/diff.c b/builtin/diff.c index bb7fafca618..dd48336da56 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -595,6 +595,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) if (1 < rev.diffopt.skip_stat_unmatch) refresh_index_quietly(); UNLEAK(rev); + release_revisions(&rev); UNLEAK(ent); UNLEAK(blob); return result; From patchwork Wed Mar 9 13:16:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775076 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7CFA6C433F5 for ; Wed, 9 Mar 2022 13:18:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233201AbiCINTn (ORCPT ); Wed, 9 Mar 2022 08:19:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38502 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231889AbiCINTW (ORCPT ); Wed, 9 Mar 2022 08:19:22 -0500 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 46D711786BA for ; Wed, 9 Mar 2022 05:17:56 -0800 (PST) Received: by mail-wm1-x329.google.com with SMTP id v2-20020a7bcb42000000b0037b9d960079so3387349wmj.0 for ; Wed, 09 Mar 2022 05:17:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=l3S0ojiebBMwCpZTKJY1ZmaM4fC8TUNSrdE0GRrOjXc=; b=PcyrplH3u4bjDfXg2ql91bhJTBTQY4Hh/V0x7HyScmPofDAXp7171lU5TXsnLMXlrp XW04yGcm5XY66nsHdpGyMEmpDpfXTEmt64/DI9pT4kZaYJRiJ7RV4fvWYOLDo2zgqz8e qufbQMXkqxgg/K+3geXuYf+h7ogZUhHh1owC877DEweOM/86IEB1y3FWjkvk0FGocO3e ples8+zwBMaYEo3RyLbNR33wa45ghCSrdrTtAuG42r5X0Uub6RzokqbSjHVXlSV0L96z piTAuaAlDCGK2oHtqAQbaQhyvLw086wySey2N2q//oc/YJ3wvQh1rGH0ZmEiUy06Ffqi 8QAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=l3S0ojiebBMwCpZTKJY1ZmaM4fC8TUNSrdE0GRrOjXc=; b=0NBJj4h780ptuafFEuau/YtrN/Uf7B6WUoiHk2u4+R7HIV4/X/J4li0Su1Pk6lTwTd E5bGLcXjTqQwCqsniQwCq9AGxUXcc+UvP/y/9EiRv0ef5/k+UQ/c2H4P4mu4Rc/TkmWH +0Siz0tQFT6f6LGDvVHlYYHfC5bXKhcnGVk4pvS4ldfyUMA7X5fCg8Rex/nA8fULjRTI 9K2ba9lns2fLX6Nz1aATtaL74bjkDSOOe3qj9+mSPc2cUCf6d/3HvKIA3p4ZsI2NEjkl encuw3WzolhAQWI9cRa7n4EC7b721xHcuVHDaSwswHbtqxXhMOIB7vgAOZjVuOgKl2zE ryxw== X-Gm-Message-State: AOAM531hyBvl3ZIcCnnNG77Q5v2M8p5sP2uDBIupx1QQdTWx15xBpepT RdEtmuLU6fob0R8/z6l5Wm85NysLpxh+qQ== X-Google-Smtp-Source: ABdhPJwWb0Ndf8PWgX3Fe1HJC9n5TojnSugAp93SOz6LA51EGNYii929LDbM4YBuAJbgtbgNdnthrQ== X-Received: by 2002:a05:600c:27cb:b0:381:400d:3bba with SMTP id l11-20020a05600c27cb00b00381400d3bbamr7644315wmb.60.1646831874489; Wed, 09 Mar 2022 05:17:54 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:53 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 12/24] revisions API users: use release_revisions() in submodule.c edge case Date: Wed, 9 Mar 2022 14:16:42 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Use release_revisions() on the the "struct rev_info" in show_submodule_diff_summary() where we need to pre-initialize with "{ 0 }" to make sure that we won't segfault when calling release_revisions(). Most functions that use "struct rev_info" will call repo_init_revisions() early, which will do an equivalent memset(). In this case we might "goto out" before doing the equivalent of that operation, see the "goto" on "(!left || !right || !sub)" added in 8e6df65015f (submodule: refactor show_submodule_summary with helper function, 2016-08-31). Signed-off-by: Ævar Arnfjörð Bjarmason --- submodule.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/submodule.c b/submodule.c index 0510cb193b6..285c1896c9e 100644 --- a/submodule.c +++ b/submodule.c @@ -638,7 +638,7 @@ void show_submodule_diff_summary(struct diff_options *o, const char *path, struct object_id *one, struct object_id *two, unsigned dirty_submodule) { - struct rev_info rev; + struct rev_info rev = { 0 }; struct commit *left = NULL, *right = NULL; struct commit_list *merge_bases = NULL; struct repository *sub; @@ -664,6 +664,7 @@ void show_submodule_diff_summary(struct diff_options *o, const char *path, print_submodule_diff_summary(sub, &rev, o); out: + release_revisions(&rev); if (merge_bases) free_commit_list(merge_bases); clear_commit_marks(left, ~0); From patchwork Wed Mar 9 13:16:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775077 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AB748C433FE for ; Wed, 9 Mar 2022 13:18:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233203AbiCINTq (ORCPT ); Wed, 9 Mar 2022 08:19:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40588 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233098AbiCINTW (ORCPT ); Wed, 9 Mar 2022 08:19:22 -0500 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 008F2179242 for ; Wed, 9 Mar 2022 05:17:56 -0800 (PST) Received: by mail-wm1-x332.google.com with SMTP id 7-20020a05600c228700b00385fd860f49so1476618wmf.0 for ; Wed, 09 Mar 2022 05:17:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EI00vwRJmB1TVGS+VBFnKShGvbrK1AWYXtS78OSTvy8=; b=QxfKamsumbhmW1ugOcoPQhXRnsS4TVX5Pa8jEENFOuWiYiUlQ2hIWfhn5TQ/I9Lekm wP0c5/eytz0IEhW69x7aE5TCDaBnLYQRU0fzQicbL5SubBnpO/sX8HtkD4RLf7wSESiL 3tmXXbkBW7RogI+sWRXNVEGstFono8OvYhRwLH0ozwg1cZBweDTb6ZQbTLPVq5J4QiRi s5YAiogTODCP0QQsLHPIg9ezpQB8LVylhFvtbjv1BH3J5pb0DV524PlaQ0IrZ4Lrl1w8 E/PkvtZvMyryQbOpy3RDeH6JpCtOQzHwWkn3a24LWyTk1Xo8+9e24iJpRb0QUxDXEI+d YeeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EI00vwRJmB1TVGS+VBFnKShGvbrK1AWYXtS78OSTvy8=; b=I+cHiYh28tx2CNCyFBRNWzOmT03sjhLZ8GmK3Q3zpunDnox+K+5ialKkVyjKPHLMtZ vmxBkeTtOH+FMoRKNSmzEVPIeV5EuUWYqEiIfSu+cFQEnEouCiPe70iw52SELTx65wbY gpYb4oscheToGJY4XRa4jYeew+ChHF/AW+Jtn3mOXr5Wh5HX6ccSXjUefdp4XBNRkPkt vKjGTh96baUnIxINi9kYPy5lBTBiFB1ppsRNTJPDnKfOIzQI6ioUFD71IZVp2EvWS9RE Fvk3FZ/yDVUmtFadCKPmHVUpu8KCCcuXLfrSkIKTl10+OHPYSgMZ49nRP5kWhiku9g8D Ro9A== X-Gm-Message-State: AOAM532f8JrfXe7Q4X8wS7Z8pHHd1rJZZ7VKl/YEz2mGdBxFK0UZvgGA dN5ZWwayxVGimTNXNWqkfJN1xETZ4gFiKg== X-Google-Smtp-Source: ABdhPJyVwKy+mLJcRCBaEg2rUED32aHt+a0q9Ip2U4DbH7psBGsufBYHaQ/9h/bw3DOLjgnMKALR6A== X-Received: by 2002:a7b:c114:0:b0:381:f7ee:e263 with SMTP id w20-20020a7bc114000000b00381f7eee263mr7599476wmi.30.1646831875266; Wed, 09 Mar 2022 05:17:55 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:54 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 13/24] revisions API users: use release_revisions() in wt-status.c edge case Date: Wed, 9 Mar 2022 14:16:43 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Use release_revisions() for the "struct rev_info" in has_unstaged_changes() which didn't require the addition of a "goto" pattern, but needed us to refactor another "return fn(...)" pattern. This change is split from preceding changes to make similar conversions in those commits easier to review, as they are all repetitions of the same pattern. Signed-off-by: Ævar Arnfjörð Bjarmason --- wt-status.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/wt-status.c b/wt-status.c index a68731ea0f7..89289e52603 100644 --- a/wt-status.c +++ b/wt-status.c @@ -2537,7 +2537,9 @@ int has_unstaged_changes(struct repository *r, int ignore_submodules) rev_info.diffopt.flags.quick = 1; diff_setup_done(&rev_info.diffopt); result = run_diff_files(&rev_info, 0); - return diff_result_code(&rev_info.diffopt, result); + result = diff_result_code(&rev_info.diffopt, result); + release_revisions(&rev_info); + return result; } /** From patchwork Wed Mar 9 13:16:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775068 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 065A7C433FE for ; Wed, 9 Mar 2022 13:18:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233099AbiCINTc (ORCPT ); Wed, 9 Mar 2022 08:19:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233077AbiCINTW (ORCPT ); Wed, 9 Mar 2022 08:19:22 -0500 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EF70517924A for ; Wed, 9 Mar 2022 05:17:57 -0800 (PST) Received: by mail-wm1-x329.google.com with SMTP id c192so1338148wma.4 for ; Wed, 09 Mar 2022 05:17:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GM9RqbFJZluFX1+PoOxTw4N0L+v7R9/7FqEASUG6iy4=; b=qgH08dAbpyj5MlIfDuQkvASZoK+vAzjTz8JiJdlItBTz1iuEMZEYd+xS/TTEGsPZYg IbkY2NCVAE7cf/sL9DB5GVAYPmwLtpmEhJ+c+vv2gvnZ/Q73/x0D0U0/O6S/5IaUWyH9 VuUGxmrz/PID2UqN7XyL9K7c3LueRgK574nOuBIBqZloItNZ+sUwUk2eDK9qyXnisE54 LyhJXXQ34ebeqcrhHPwPdVTqaqopzKw/3NojQZHZZj3H52zOJAXsGOhH+Q9MorKHxylO H2E6Y/2usskiWz5e24PMJ4AushBf0mb5tdaTOwGzt1awIYDm3VF5jzDX6bTVBUalIgHL zp+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GM9RqbFJZluFX1+PoOxTw4N0L+v7R9/7FqEASUG6iy4=; b=FYNrpFEcfEeznncPReFLGg8Q35bgJO6e4TrUro+mW3Mus6HVNP/PrjV2TmNQ5Ws6Pl 7XE9JujGG7D5avsJpeZKwAm1S5SbgEBgLKH4HSMdonEF4K7uWMUOALyXj01DX7/pM2ap PGEoCnweZuQEIQjXHHG85YFYychZwiR81VD/XOZf2Vu2jCUe6s5OR6c10VxxA/lTw7UC RIyJ4B0EH3t1uDg297Ca4UKqKEh0x4MGuXRpWgp4KP9XNL5nag/7UE65pHyL3gGcM1GE uf6MqCey1qxB+WScCohZd6ozWajuAEcNu2cJR9QHm07WkUVXjfynN9w9aKXkvLXJIKjg Kuzg== X-Gm-Message-State: AOAM531cwTU1xa4jinqV2nz/3W2TYRztS93vrvbatDgZcRlxwl0QbhxI Ji0XpF9ptriS2FiKr+rwGWQD3JjTtIqWJQ== X-Google-Smtp-Source: ABdhPJy1CILEjH52Lp+DpfLEXaqty2EcOo3LLMEIWJnl8tjHBH0Ya6WAQpuTZNETDnntCZK2eV5GGQ== X-Received: by 2002:a1c:e915:0:b0:37b:d847:e127 with SMTP id q21-20020a1ce915000000b0037bd847e127mr3382968wmc.180.1646831876170; Wed, 09 Mar 2022 05:17:56 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:55 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 14/24] revisions API users: use release_revisions() for "prune_data" users Date: Wed, 9 Mar 2022 14:16:44 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Use release_revisions() for users of "struct rev_list" that reach into the "struct rev_info" and clear the "prune_data" already. In a subsequent commit we'll teach release_revisions() to clear this itself, but in the meantime let's invoke release_revisions() here to clear anything else we may have missed, and for reasons of having consistent boilerplate. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/add.c | 1 + builtin/stash.c | 1 + diff-lib.c | 1 + wt-status.c | 1 + 4 files changed, 4 insertions(+) diff --git a/builtin/add.c b/builtin/add.c index f507d2191cd..115a26ea633 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -143,6 +143,7 @@ int add_files_to_cache(const char *prefix, rev.max_count = 0; /* do not compare unmerged paths with stage #2 */ run_diff_files(&rev, DIFF_RACY_IS_MODIFIED); clear_pathspec(&rev.prune_data); + release_revisions(&rev); return !!data.add_errors; } diff --git a/builtin/stash.c b/builtin/stash.c index 0b9d55d09bb..b9fe6f7c712 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1073,6 +1073,7 @@ static int check_changes_tracked_files(const struct pathspec *ps) done: clear_pathspec(&rev.prune_data); + release_revisions(&rev); return ret; } diff --git a/diff-lib.c b/diff-lib.c index ad1dd4834f7..68858a39964 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -642,6 +642,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt) if (diff_cache(&revs, tree_oid, NULL, 1)) exit(128); clear_pathspec(&revs.prune_data); + release_revisions(&revs); return 0; } diff --git a/wt-status.c b/wt-status.c index 89289e52603..aaef10451f3 100644 --- a/wt-status.c +++ b/wt-status.c @@ -617,6 +617,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_files(&rev, 0); clear_pathspec(&rev.prune_data); + release_revisions(&rev); } static void wt_status_collect_changes_index(struct wt_status *s) From patchwork Wed Mar 9 13:16:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775069 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D0987C433F5 for ; Wed, 9 Mar 2022 13:18:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233102AbiCINTd (ORCPT ); Wed, 9 Mar 2022 08:19:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40584 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233097AbiCINTW (ORCPT ); Wed, 9 Mar 2022 08:19:22 -0500 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1C52179260 for ; Wed, 9 Mar 2022 05:17:58 -0800 (PST) Received: by mail-wm1-x32c.google.com with SMTP id r9-20020a1c4409000000b00389d0a5c511so309900wma.5 for ; Wed, 09 Mar 2022 05:17:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wiiWAv+I10fNYVvilUo6mIoqTGFBIvQCkCEdKqwlSjI=; b=fLDJNlLhhChz1UWcwBA927wo6s21TVqJ8igog/8RWI1nq8aJMqRqy4I2GTYZvAAQ/+ wftmASmt0ORX+YjZfwzoJweHxpRFE1H/IMl+hBcnzK/hOjk1mul8QecW1LVvLGoMugSP tpLw01kD8fpQ/4AIRThmOxix6O2ouXqO5WR5t6ol2/TI1yDRG+8ZWs/RE5iL0K6UFJ0n MhnZ8T80BH5aipW8aKwO5cJ570fmjupbMrMEQpGPPL3fdB/EDf7DvQqCfmcZk8Yu2vkB RREMztA4UhyEgJl0ObrGKDmhZppKXxmhVoarMxv0Ont5TTitv8yCLHNFnnv4xF1ph51O 0OYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wiiWAv+I10fNYVvilUo6mIoqTGFBIvQCkCEdKqwlSjI=; b=U5nwWeKjNFTVd45b4w31XaziXeqhEuMfFO1vBGhneZAdnzIdMLFnGeHobIsyxRK1Mm NnJWxk6X9PE7BnEWYbkJiVFnzNHFYI7FDbh3iCPjCkXdUY67xwjEHM1BKXOYKEfBeYEB iqqc6NTziKtZCLJSUG+SKcqbAzFN1udGgBzc2VO2Jj/KbpZ6aa68FSegtA/Ie/PaxnV/ uLlZX11iEdVZ8x6QYfBAVk4nMdh9/WPwJcK25rWO66JSEYreMCQY5aheAFO2oXZg2WGY hAn9ZJGU1g/ctOxbT05lOZWzkKn4OgXChh8QNxFD/vAlf9n1hTIf3Fh7ScjOe3J+/qLb zEvQ== X-Gm-Message-State: AOAM530H8Yzg8PlahTsXtUGezBDu9BDVZ7mwMWpEYZis/XfueaGknWCB CfbHOU/zWB16ybMX6gLwuqOVxCn2MbrseA== X-Google-Smtp-Source: ABdhPJwNnYKM84wd79FLJ9EyfNO8CqXS7TAwQqTiSS/t3jgqZuo9t5QnBuZomvxpqz6+vF8OPke7xw== X-Received: by 2002:a05:600c:3011:b0:387:a08f:44d8 with SMTP id j17-20020a05600c301100b00387a08f44d8mr7597492wmh.59.1646831877125; Wed, 09 Mar 2022 05:17:57 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:56 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 15/24] revisions API: have release_revisions() release "commits" Date: Wed, 9 Mar 2022 14:16:45 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "commits" in the "struct ref_info". Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 1 + 1 file changed, 1 insertion(+) diff --git a/revision.c b/revision.c index 831f2cf977b..475901d77e3 100644 --- a/revision.c +++ b/revision.c @@ -2930,6 +2930,7 @@ void release_revisions(struct rev_info *revs) { if (!revs) return; + release_revisions_commit_list(revs); object_array_clear(&revs->pending); } From patchwork Wed Mar 9 13:16:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775075 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F3A8C433EF for ; Wed, 9 Mar 2022 13:18:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233166AbiCINTm (ORCPT ); Wed, 9 Mar 2022 08:19:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233087AbiCINTX (ORCPT ); Wed, 9 Mar 2022 08:19:23 -0500 Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C8BAB179264 for ; Wed, 9 Mar 2022 05:17:59 -0800 (PST) Received: by mail-wr1-x42c.google.com with SMTP id p9so2956981wra.12 for ; Wed, 09 Mar 2022 05:17:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zqgN6PyQg+3srJo009vad6F2EKj0rAzah0mvKa1Aa+U=; b=Fxj9UqK0iy/TsAeeI17iB+Laky2m1+rb32+fqsgS/tMWS9Htbvyhj0LQ/GFyu+KCOA 6/SWDZzRT8ZuWexK22FBQaUVTQxgGerQWtBcZR9rv9t02W8y91rHVhRkWhrpkGSNBKBV ZGQx4zRYW968HV3W8nHnTkeCfb1ZD5MxvlCgQzL0tbPXemjqcUPFc3E5m6pKEAPhNCe/ ghnP5itx3zf8uWTUNFVqpuZQQdyd9CCmWqEbU5SLAgDJj760nRXYMm0J5BKusDFf/yXN JPpikBgFJH9stIr4zpAhrmB7ZnCzK6vJFoOTX8++BLbh8dAb1wFkLoKWA1qQ627LwyW5 pX3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zqgN6PyQg+3srJo009vad6F2EKj0rAzah0mvKa1Aa+U=; b=S9wQ+UqudHCm9WbDwP/9loxBdgFRbcwuAbX/gzJ1MXH/MdBAkc/6V7LUSfQyu/+KvU PAAJvrDKt+LIOkCJT0SXrhZXiphqZS30l4zx4Dgvkfi4aDM+pMoqW0E8f6cZ6yugBJgu w91fpzB+36v/PbHZXKNMDT1S1hwZqCcqRjMQKzHL5sNAFgZnOXpTQAOWLs+xS0npLquN sluk6aLe718sPg4cWc8/FYttuHE4OnSAA3bsqpzJk4stdkuWqFdKWqMcuoxqvTWyilx6 NOtmchvQioBE2T5Dhva4d6hkF38t3xprfwVYRKUDiCbtEy7VGxmzjRATQhVRsteyTs/X ITgA== X-Gm-Message-State: AOAM532oCMfSxjUfoOn5aAJZZ0A+qqef8KEE1tGo8iQcur7i+F6no9Nb cKeeuKG/yczhecK8xzgKVuDA8yrTlQwSmw== X-Google-Smtp-Source: ABdhPJwbnbKXM/opleL0I5Migv+r8l4c1s12gvRxoSZRyGuf0OQS5u5n5JtWJgbG2dfBWDcxRg+ZZw== X-Received: by 2002:a5d:588e:0:b0:203:77d2:af48 with SMTP id n14-20020a5d588e000000b0020377d2af48mr2263341wrf.214.1646831877971; Wed, 09 Mar 2022 05:17:57 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:57 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 16/24] revisions API: have release_revisions() release "mailmap" Date: Wed, 9 Mar 2022 14:16:46 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "prune_data" in the "struct ref_info". The log family of functions now calls the clear_mailmap() function added in fa8afd18e5a (revisions API: provide and use a release_revisions(), 2021-09-19), allowing us to whitelist some tests with "TEST_PASSES_SANITIZE_LEAK=true". Unfortunately having a pointer to a mailmap in "struct rev_info" instead of an embedded member that we "own" get a bit messy, as can be seen in the change to builtin/commit.c. When we free() this data we won't be able to tell apart a pointer to a "mailmap" on the heap from one on the stack. As seen in ea57bc0d41b (log: add --use-mailmap option, 2013-01-05) the "log" family allocates it on the heap, but in the find_author_by_nickname() code added in ea16794e430 (commit: search author pattern against mailmap, 2013-08-23) we allocated it on the stack instead. Ideally we'd simply change that member to a "struct string_list mailmap" and never free() the "mailmap" itself, but that would be a much larger change to the revisions API. We have code that needs to hand an existing "mailmap" to a "struct rev_info", while we could change all of that, let's not go there now. The complexity isn't in the ownership of the "mailmap" per-se, but that various things assume a "rev_info.mailmap == NULL" means "doesn't want mailmap", if we changed that to an init'd "struct string_list we'd need to carefully refactor things to change those assumptions. Let's instead always free() it, and simply declare that if you add such a "mailmap" it must be allocated on the heap. Any modern libc will correctly panic if we free() a stack variable, so this should be safe going forward. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/commit.c | 6 +++--- revision.c | 9 +++++++++ t/t0056-git-C.sh | 1 + t/t4055-diff-context.sh | 1 + t/t4066-diff-emit-delay.sh | 1 + t/t7008-filter-branch-null-sha1.sh | 2 ++ 6 files changed, 17 insertions(+), 3 deletions(-) diff --git a/builtin/commit.c b/builtin/commit.c index 74388a6b9a1..9a6f38db165 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1097,7 +1097,7 @@ static const char *find_author_by_nickname(const char *name) struct rev_info revs; struct commit *commit; struct strbuf buf = STRBUF_INIT; - struct string_list mailmap = STRING_LIST_INIT_NODUP; + struct string_list *mailmap = xmalloc(sizeof(struct string_list)); const char *av[20]; int ac = 0; @@ -1108,7 +1108,8 @@ static const char *find_author_by_nickname(const char *name) av[++ac] = buf.buf; av[++ac] = NULL; setup_revisions(ac, av, &revs, NULL); - revs.mailmap = &mailmap; + string_list_init_nodup(mailmap); + revs.mailmap = mailmap; read_mailmap(revs.mailmap); if (prepare_revision_walk(&revs)) @@ -1119,7 +1120,6 @@ static const char *find_author_by_nickname(const char *name) ctx.date_mode.type = DATE_NORMAL; strbuf_release(&buf); format_commit_message(commit, "%aN <%aE>", &buf, &ctx); - clear_mailmap(&mailmap); release_revisions(&revs); return strbuf_detach(&buf, NULL); } diff --git a/revision.c b/revision.c index 475901d77e3..2050a691683 100644 --- a/revision.c +++ b/revision.c @@ -2926,12 +2926,21 @@ static void release_revisions_commit_list(struct rev_info *revs) revs->commits = NULL; } +static void release_revisions_mailmap(struct string_list *mailmap) +{ + if (!mailmap) + return; + clear_mailmap(mailmap); + free(mailmap); +} + void release_revisions(struct rev_info *revs) { if (!revs) return; release_revisions_commit_list(revs); object_array_clear(&revs->pending); + release_revisions_mailmap(revs->mailmap); } static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) diff --git a/t/t0056-git-C.sh b/t/t0056-git-C.sh index 2630e756dab..752aa8c9454 100755 --- a/t/t0056-git-C.sh +++ b/t/t0056-git-C.sh @@ -2,6 +2,7 @@ test_description='"-C " option and its effects on other path-related options' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success '"git -C " runs git from the directory ' ' diff --git a/t/t4055-diff-context.sh b/t/t4055-diff-context.sh index 741e0803c1a..73048d0a526 100755 --- a/t/t4055-diff-context.sh +++ b/t/t4055-diff-context.sh @@ -5,6 +5,7 @@ test_description='diff.context configuration' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t4066-diff-emit-delay.sh b/t/t4066-diff-emit-delay.sh index a1de63b77f8..0ecb3915412 100755 --- a/t/t4066-diff-emit-delay.sh +++ b/t/t4066-diff-emit-delay.sh @@ -4,6 +4,7 @@ test_description='test combined/stat/moved interaction' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # This test covers a weird 3-way interaction between "--cc -p", which will run diff --git a/t/t7008-filter-branch-null-sha1.sh b/t/t7008-filter-branch-null-sha1.sh index 9ba9f24ad2f..0ce8fd2c895 100755 --- a/t/t7008-filter-branch-null-sha1.sh +++ b/t/t7008-filter-branch-null-sha1.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='filter-branch removal of trees with null sha1' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup: base commits' ' From patchwork Wed Mar 9 13:16:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775073 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6B6D6C433F5 for ; Wed, 9 Mar 2022 13:18:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233141AbiCINTj (ORCPT ); Wed, 9 Mar 2022 08:19:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40584 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233006AbiCINTZ (ORCPT ); Wed, 9 Mar 2022 08:19:25 -0500 Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0E533179274 for ; Wed, 9 Mar 2022 05:18:01 -0800 (PST) Received: by mail-wr1-x434.google.com with SMTP id u1so2962049wrg.11 for ; Wed, 09 Mar 2022 05:18:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kXuHhGZkmEKFdBnjBbLuSyBLTsXpbVknEr7XXYCIv74=; b=cZ8Zg7Kd1cCsBzxlRNYmhRp5/VxIzBOHm8ACiwHd2M5nhn+p2KZMiPZSiZLROsqDca Aghr2fkCf2ZgHiSmCYW7Zp2F1QNZjSHFaKybSbrL2WivqolSjiVwyKdgClod8s2HO9xK LYJEcmusBJuyDlIRZbAbJoi+4IGOtVe6+hoJxeBA7uzGkDgwR8yk3AqumyXRAzu2SbmE LrTpBz5ulSmGCaxkKv+kphfwSGtvb1fq6H/CSQDIMtmtsxOgd2C+q7w4+3C+vT7mrAie gUV8lhjbUZ4WA4YiJ6t2x7076K0oFqITPhtLHuMRGN7gEKrD4Ng3bRyGoCVri6/o3Y3L eCAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kXuHhGZkmEKFdBnjBbLuSyBLTsXpbVknEr7XXYCIv74=; b=ZPELZtCMRMBnUrLVq/FNx30oeQe/4w+7jieKr/49hL4r3YcbZg/uudQzaocC2qHfGv Q9NfRy6IOMdYRtrdETJ39ssz4b1ItPksHNfRjLcy+xntCc9cGE6mnagZnc4Eimp4EZsJ c3V9re274JKUehKCotaCEaR+LP2t1ihrtY3S+UzE1BBJBJnRrK/2erPXlisS2sVAN3K6 J7CWcliVjz2s1KrgniMnuH1sCpLCHEHhXEHsmMNLfMDVSeqvC8Zj+3kXe2Re3vqgvQQi hOw4DcAxESZ4MfUwW77Ppm2VK1SOk539HGmm0Dn+a07fo3m9WBXi1TqmvEBluzKv/avz QgsQ== X-Gm-Message-State: AOAM531jow5IdIRe4Se1C2EsU2mI+AW1thWPSFYD3HNyIBkuYNT+IrBC HsMQB+oWp8K1YmPVio8H8S3tp5RfXCCJGQ== X-Google-Smtp-Source: ABdhPJzjszYpnKdEuYTKz5/NaeUcGzd4xCPGf7gVOj4easVQUJ5gHEzVmJa76NVo0d0ix6AHLc4/Vw== X-Received: by 2002:a5d:5241:0:b0:1f0:1842:efbd with SMTP id k1-20020a5d5241000000b001f01842efbdmr15241697wrc.320.1646831879014; Wed, 09 Mar 2022 05:17:59 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:58 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 17/24] revisions API: have release_revisions() release "cmdline" Date: Wed, 9 Mar 2022 14:16:47 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "cmdline" in the "struct ref_info". This in combination with a preceding change to free "commits" and "mailmap" means that we can whitelist another test under "TEST_PASSES_SANITIZE_LEAK=true". There was a proposal in [1] to do away with xstrdup()-ing this add_rev_cmdline(), perhaps that would be worthwhile, but for now let's just free() it. We could also make that a "char *" in "struct rev_cmdline_entry" itself, but since we own it let's expose it as a constant to outside callers. I proposed that in [2] but have since changed my mind. See 14d30cdfc04 (ref-filter: fix memory leak in `free_array_item()`, 2019-07-10), c514c62a4fd (checkout: fix leak of non-existent branch names, 2020-08-14) and other log history hits for "free((char *)" for prior art. This includes the tests we had false-positive passes on before my 6798b08e848 (perl Git.pm: don't ignore signalled failure in _cmd_close(), 2022-02-01), now they pass for real. Since there are 66 tests matching t/t[0-9]*git-svn*.sh it's easier to list those that don't pass than to touch most of those 66. So let's introduce a "TEST_FAILS_SANITIZE_LEAK=true", which if set in the tests won't cause lib-git-svn.sh to set "TEST_PASSES_SANITIZE_LEAK=true. This change also marks all the tests that we removed "TEST_FAILS_SANITIZE_LEAK=true" from in an earlier commit due to removing the UNLEAK() from cmd_format_patch(), we can now assert that its API use doesn't leak any "struct rev_info" memory. This change also made commit "t5503-tagfollow.sh" pass on current master, but that would regress when combined with ps/fetch-atomic-fixup's de004e848a9 (t5503: simplify setup of test which exercises failure of backfill, 2022-03-03) (through no fault of that topic, that change started using "git clone" in the test, which has an outstanding leak). Let's leave that test out for now to avoid in-flight semantic conflicts. 1. https://lore.kernel.org/git/YUj%2FgFRh6pwrZalY@carlos-mbp.lan/ 2. https://lore.kernel.org/git/87o88obkb1.fsf@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason fixup with bc0e0439040? --- revision.c | 12 ++++++++++++ t/lib-git-svn.sh | 4 ++++ t/t0062-revision-walking.sh | 1 + t/t0101-at-syntax.sh | 2 ++ t/t1060-object-corruption.sh | 2 ++ t/t2015-checkout-unborn.sh | 1 + t/t3408-rebase-multi-line.sh | 1 + t/t4207-log-decoration-colors.sh | 1 + t/t4212-log-corrupt.sh | 1 + t/t5313-pack-bounds-checks.sh | 2 ++ t/t5322-pack-objects-sparse.sh | 1 + t/t5506-remote-groups.sh | 1 + t/t5513-fetch-track.sh | 1 + t/t5515-fetch-merge-logic.sh | 1 + t/t5518-fetch-exit-status.sh | 1 + t/t5532-fetch-proxy.sh | 2 ++ t/t5900-repo-selection.sh | 2 ++ t/t6002-rev-list-bisect.sh | 1 + t/t6003-rev-list-topo-order.sh | 1 + t/t6018-rev-list-glob.sh | 1 + t/t6019-rev-list-ancestry-path.sh | 1 + t/t6100-rev-list-in-order.sh | 1 + t/t6101-rev-parse-parents.sh | 1 + t/t6114-keep-packs.sh | 2 ++ t/t7702-repack-cyclic-alternate.sh | 2 ++ t/t9100-git-svn-basic.sh | 1 + t/t9101-git-svn-props.sh | 2 ++ t/t9104-git-svn-follow-parent.sh | 2 ++ t/t9106-git-svn-commit-diff-clobber.sh | 2 ++ t/t9122-git-svn-author.sh | 2 ++ t/t9129-git-svn-i18n-commitencoding.sh | 1 + t/t9139-git-svn-non-utf8-commitencoding.sh | 1 + t/t9148-git-svn-propset.sh | 1 + t/t9151-svn-mergeinfo.sh | 1 + t/t9157-git-svn-fetch-merge.sh | 2 ++ t/t9159-git-svn-no-parent-mergeinfo.sh | 2 ++ t/t9161-git-svn-mergeinfo-push.sh | 1 + t/t9162-git-svn-dcommit-interactive.sh | 2 ++ t/t9163-git-svn-reset-clears-caches.sh | 1 + t/t9165-git-svn-fetch-merge-branch-of-branch.sh | 2 ++ t/t9166-git-svn-fetch-merge-branch-of-branch2.sh | 2 ++ 41 files changed, 71 insertions(+) diff --git a/revision.c b/revision.c index 2050a691683..6c83a715dee 100644 --- a/revision.c +++ b/revision.c @@ -2926,6 +2926,17 @@ static void release_revisions_commit_list(struct rev_info *revs) revs->commits = NULL; } +static void release_revisions_cmdline(struct rev_cmdline_info *cmdline) +{ + unsigned int i; + + if (!cmdline) + return; + for (i = 0; i < cmdline->nr; i++) + free((char *)cmdline->rev[i].name); + FREE_AND_NULL(cmdline->rev); +} + static void release_revisions_mailmap(struct string_list *mailmap) { if (!mailmap) @@ -2940,6 +2951,7 @@ void release_revisions(struct rev_info *revs) return; release_revisions_commit_list(revs); object_array_clear(&revs->pending); + release_revisions_cmdline(&revs->cmdline); release_revisions_mailmap(revs->mailmap); } diff --git a/t/lib-git-svn.sh b/t/lib-git-svn.sh index 2fde2353fd3..ea28971e8ee 100644 --- a/t/lib-git-svn.sh +++ b/t/lib-git-svn.sh @@ -1,3 +1,7 @@ +if test -z "$TEST_FAILS_SANITIZE_LEAK" +then + TEST_PASSES_SANITIZE_LEAK=true +fi . ./test-lib.sh if test -n "$NO_SVN_TESTS" diff --git a/t/t0062-revision-walking.sh b/t/t0062-revision-walking.sh index 8e215867b8c..b9480c81781 100755 --- a/t/t0062-revision-walking.sh +++ b/t/t0062-revision-walking.sh @@ -5,6 +5,7 @@ test_description='Test revision walking api' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh cat >run_twice_expected <<-EOF diff --git a/t/t0101-at-syntax.sh b/t/t0101-at-syntax.sh index a1998b558f9..878aadd64c9 100755 --- a/t/t0101-at-syntax.sh +++ b/t/t0101-at-syntax.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='various @{whatever} syntax tests' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t1060-object-corruption.sh b/t/t1060-object-corruption.sh index bc89371f534..5b8e47e346c 100755 --- a/t/t1060-object-corruption.sh +++ b/t/t1060-object-corruption.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='see how we handle various forms of corruption' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # convert "1234abcd" to ".git/objects/12/34abcd" diff --git a/t/t2015-checkout-unborn.sh b/t/t2015-checkout-unborn.sh index a9721215fab..9425aae6395 100755 --- a/t/t2015-checkout-unborn.sh +++ b/t/t2015-checkout-unborn.sh @@ -4,6 +4,7 @@ test_description='checkout from unborn branch' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t3408-rebase-multi-line.sh b/t/t3408-rebase-multi-line.sh index cde3562e3a6..7b4607d72f2 100755 --- a/t/t3408-rebase-multi-line.sh +++ b/t/t3408-rebase-multi-line.sh @@ -5,6 +5,7 @@ test_description='rebasing a commit with multi-line first paragraph.' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4207-log-decoration-colors.sh b/t/t4207-log-decoration-colors.sh index b8709424981..36ac6aff1e4 100755 --- a/t/t4207-log-decoration-colors.sh +++ b/t/t4207-log-decoration-colors.sh @@ -8,6 +8,7 @@ test_description='Test for "git log --decorate" colors' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4212-log-corrupt.sh b/t/t4212-log-corrupt.sh index 0244888a5a7..30a219894bb 100755 --- a/t/t4212-log-corrupt.sh +++ b/t/t4212-log-corrupt.sh @@ -2,6 +2,7 @@ test_description='git log with invalid commit headers' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t5313-pack-bounds-checks.sh b/t/t5313-pack-bounds-checks.sh index 535313e4dc8..cc4cfaa9d37 100755 --- a/t/t5313-pack-bounds-checks.sh +++ b/t/t5313-pack-bounds-checks.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='bounds-checking of access to mmapped on-disk file formats' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh clear_base () { diff --git a/t/t5322-pack-objects-sparse.sh b/t/t5322-pack-objects-sparse.sh index d39958c066d..770695c9278 100755 --- a/t/t5322-pack-objects-sparse.sh +++ b/t/t5322-pack-objects-sparse.sh @@ -4,6 +4,7 @@ test_description='pack-objects object selection using sparse algorithm' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup repo' ' diff --git a/t/t5506-remote-groups.sh b/t/t5506-remote-groups.sh index 8f150c0793e..5bac03ede81 100755 --- a/t/t5506-remote-groups.sh +++ b/t/t5506-remote-groups.sh @@ -4,6 +4,7 @@ test_description='git remote group handling' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh mark() { diff --git a/t/t5513-fetch-track.sh b/t/t5513-fetch-track.sh index 65d1e05bd62..c46c4dbaefc 100755 --- a/t/t5513-fetch-track.sh +++ b/t/t5513-fetch-track.sh @@ -2,6 +2,7 @@ test_description='fetch follows remote-tracking branches correctly' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh index 320d26796d2..c100a809c5e 100755 --- a/t/t5515-fetch-merge-logic.sh +++ b/t/t5515-fetch-merge-logic.sh @@ -14,6 +14,7 @@ export GIT_TEST_PROTOCOL_VERSION GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh build_script () { diff --git a/t/t5518-fetch-exit-status.sh b/t/t5518-fetch-exit-status.sh index 5c4ac2556e7..c13120088fa 100755 --- a/t/t5518-fetch-exit-status.sh +++ b/t/t5518-fetch-exit-status.sh @@ -8,6 +8,7 @@ test_description='fetch exit status test' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t5532-fetch-proxy.sh b/t/t5532-fetch-proxy.sh index 9c2798603b4..d664912799b 100755 --- a/t/t5532-fetch-proxy.sh +++ b/t/t5532-fetch-proxy.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='fetching via git:// using core.gitproxy' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup remote repo' ' diff --git a/t/t5900-repo-selection.sh b/t/t5900-repo-selection.sh index 14e59c5b3e4..a84faac242d 100755 --- a/t/t5900-repo-selection.sh +++ b/t/t5900-repo-selection.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='selecting remote repo in ambiguous cases' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh reset() { diff --git a/t/t6002-rev-list-bisect.sh b/t/t6002-rev-list-bisect.sh index b95a0212adf..162cf50778d 100755 --- a/t/t6002-rev-list-bisect.sh +++ b/t/t6002-rev-list-bisect.sh @@ -4,6 +4,7 @@ # test_description='Tests git rev-list --bisect functionality' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions diff --git a/t/t6003-rev-list-topo-order.sh b/t/t6003-rev-list-topo-order.sh index 24d1836f417..1f7d7dd20c1 100755 --- a/t/t6003-rev-list-topo-order.sh +++ b/t/t6003-rev-list-topo-order.sh @@ -5,6 +5,7 @@ test_description='Tests git rev-list --topo-order functionality' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions diff --git a/t/t6018-rev-list-glob.sh b/t/t6018-rev-list-glob.sh index 24b34add833..e1abc5c2b32 100755 --- a/t/t6018-rev-list-glob.sh +++ b/t/t6018-rev-list-glob.sh @@ -5,6 +5,7 @@ test_description='rev-list/rev-parse --glob' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh commit () { diff --git a/t/t6019-rev-list-ancestry-path.sh b/t/t6019-rev-list-ancestry-path.sh index af57a04b7ff..66f787606ec 100755 --- a/t/t6019-rev-list-ancestry-path.sh +++ b/t/t6019-rev-list-ancestry-path.sh @@ -24,6 +24,7 @@ test_description='--ancestry-path' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_merge () { diff --git a/t/t6100-rev-list-in-order.sh b/t/t6100-rev-list-in-order.sh index e934bc239c5..88ed7bd75a7 100755 --- a/t/t6100-rev-list-in-order.sh +++ b/t/t6100-rev-list-in-order.sh @@ -2,6 +2,7 @@ test_description='rev-list testing in-commit-order' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup a commit history with trees, blobs' ' diff --git a/t/t6101-rev-parse-parents.sh b/t/t6101-rev-parse-parents.sh index c571fa51797..a3a41c7a3e4 100755 --- a/t/t6101-rev-parse-parents.sh +++ b/t/t6101-rev-parse-parents.sh @@ -8,6 +8,7 @@ test_description='Test git rev-parse with different parent options' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_cmp_rev_output () { diff --git a/t/t6114-keep-packs.sh b/t/t6114-keep-packs.sh index 9239d8aa46d..44246f8a63e 100755 --- a/t/t6114-keep-packs.sh +++ b/t/t6114-keep-packs.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='rev-list with .keep packs' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t7702-repack-cyclic-alternate.sh b/t/t7702-repack-cyclic-alternate.sh index 93b74867ac8..f3cdb98eec2 100755 --- a/t/t7702-repack-cyclic-alternate.sh +++ b/t/t7702-repack-cyclic-alternate.sh @@ -4,6 +4,8 @@ # test_description='repack involving cyclic alternate' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh index fea41b3c360..7c5b847f584 100755 --- a/t/t9100-git-svn-basic.sh +++ b/t/t9100-git-svn-basic.sh @@ -8,6 +8,7 @@ test_description='git svn basic tests' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh prepare_utf8_locale diff --git a/t/t9101-git-svn-props.sh b/t/t9101-git-svn-props.sh index 8b5681dd68a..d043e80fc34 100755 --- a/t/t9101-git-svn-props.sh +++ b/t/t9101-git-svn-props.sh @@ -4,6 +4,8 @@ # test_description='git svn property tests' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh mkdir import diff --git a/t/t9104-git-svn-follow-parent.sh b/t/t9104-git-svn-follow-parent.sh index c7d8e0bf00f..5cf2ef4b8b0 100755 --- a/t/t9104-git-svn-follow-parent.sh +++ b/t/t9104-git-svn-follow-parent.sh @@ -4,6 +4,8 @@ # test_description='git svn fetching' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'initialize repo' ' diff --git a/t/t9106-git-svn-commit-diff-clobber.sh b/t/t9106-git-svn-commit-diff-clobber.sh index aec45bca3b7..3cab0b9720a 100755 --- a/t/t9106-git-svn-commit-diff-clobber.sh +++ b/t/t9106-git-svn-commit-diff-clobber.sh @@ -2,6 +2,8 @@ # # Copyright (c) 2006 Eric Wong test_description='git svn commit-diff clobber' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'initialize repo' ' diff --git a/t/t9122-git-svn-author.sh b/t/t9122-git-svn-author.sh index 9e8fe38e7ef..527ba3d2932 100755 --- a/t/t9122-git-svn-author.sh +++ b/t/t9122-git-svn-author.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='git svn authorship' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'setup svn repository' ' diff --git a/t/t9129-git-svn-i18n-commitencoding.sh b/t/t9129-git-svn-i18n-commitencoding.sh index 01e1e8a8f76..185248a4cd7 100755 --- a/t/t9129-git-svn-i18n-commitencoding.sh +++ b/t/t9129-git-svn-i18n-commitencoding.sh @@ -4,6 +4,7 @@ test_description='git svn honors i18n.commitEncoding in config' +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh compare_git_head_with () { diff --git a/t/t9139-git-svn-non-utf8-commitencoding.sh b/t/t9139-git-svn-non-utf8-commitencoding.sh index 22d80b0be2b..b7f756b2b7f 100755 --- a/t/t9139-git-svn-non-utf8-commitencoding.sh +++ b/t/t9139-git-svn-non-utf8-commitencoding.sh @@ -4,6 +4,7 @@ test_description='git svn refuses to dcommit non-UTF8 messages' +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh # ISO-2022-JP can pass for valid UTF-8, so skipping that in this test diff --git a/t/t9148-git-svn-propset.sh b/t/t9148-git-svn-propset.sh index aebb28995e5..6cc76a07b39 100755 --- a/t/t9148-git-svn-propset.sh +++ b/t/t9148-git-svn-propset.sh @@ -5,6 +5,7 @@ test_description='git svn propset tests' +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'setup propset via import' ' diff --git a/t/t9151-svn-mergeinfo.sh b/t/t9151-svn-mergeinfo.sh index c93a5beab25..85221d439bd 100755 --- a/t/t9151-svn-mergeinfo.sh +++ b/t/t9151-svn-mergeinfo.sh @@ -5,6 +5,7 @@ test_description='git-svn svn mergeinfo properties' +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'load svn dump' " diff --git a/t/t9157-git-svn-fetch-merge.sh b/t/t9157-git-svn-fetch-merge.sh index 991d2aa1be6..4d8cfdf8446 100755 --- a/t/t9157-git-svn-fetch-merge.sh +++ b/t/t9157-git-svn-fetch-merge.sh @@ -4,6 +4,8 @@ # test_description='git svn merge detection' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh svn_ver="$(svn --version --quiet)" diff --git a/t/t9159-git-svn-no-parent-mergeinfo.sh b/t/t9159-git-svn-no-parent-mergeinfo.sh index 69e4815781c..ce42487a507 100755 --- a/t/t9159-git-svn-no-parent-mergeinfo.sh +++ b/t/t9159-git-svn-no-parent-mergeinfo.sh @@ -1,5 +1,7 @@ #!/bin/sh test_description='git svn handling of root commits in merge ranges' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh svn_ver="$(svn --version --quiet)" diff --git a/t/t9161-git-svn-mergeinfo-push.sh b/t/t9161-git-svn-mergeinfo-push.sh index f113acaa6c2..89f2518685c 100755 --- a/t/t9161-git-svn-mergeinfo-push.sh +++ b/t/t9161-git-svn-mergeinfo-push.sh @@ -6,6 +6,7 @@ test_description='git-svn svn mergeinfo propagation' +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'load svn dump' " diff --git a/t/t9162-git-svn-dcommit-interactive.sh b/t/t9162-git-svn-dcommit-interactive.sh index e38d9fa37b5..e2aa8ed88a9 100755 --- a/t/t9162-git-svn-dcommit-interactive.sh +++ b/t/t9162-git-svn-dcommit-interactive.sh @@ -3,6 +3,8 @@ # Copyright (c) 2011 Frédéric Heitzmann test_description='git svn dcommit --interactive series' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'initialize repo' ' diff --git a/t/t9163-git-svn-reset-clears-caches.sh b/t/t9163-git-svn-reset-clears-caches.sh index 978eb62ff4f..e457cf28153 100755 --- a/t/t9163-git-svn-reset-clears-caches.sh +++ b/t/t9163-git-svn-reset-clears-caches.sh @@ -7,6 +7,7 @@ test_description='git svn reset clears memoized caches' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh svn_ver="$(svn --version --quiet)" diff --git a/t/t9165-git-svn-fetch-merge-branch-of-branch.sh b/t/t9165-git-svn-fetch-merge-branch-of-branch.sh index a4813c2b09c..58b736dc132 100755 --- a/t/t9165-git-svn-fetch-merge-branch-of-branch.sh +++ b/t/t9165-git-svn-fetch-merge-branch-of-branch.sh @@ -4,6 +4,8 @@ # test_description='git svn merge detection' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh svn_ver="$(svn --version --quiet)" diff --git a/t/t9166-git-svn-fetch-merge-branch-of-branch2.sh b/t/t9166-git-svn-fetch-merge-branch-of-branch2.sh index 52f2e46a5b4..9f7deb26d0e 100755 --- a/t/t9166-git-svn-fetch-merge-branch-of-branch2.sh +++ b/t/t9166-git-svn-fetch-merge-branch-of-branch2.sh @@ -4,6 +4,8 @@ # test_description='git svn merge detection' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh svn_ver="$(svn --version --quiet)" From patchwork Wed Mar 9 13:16:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775074 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E545C433FE for ; Wed, 9 Mar 2022 13:18:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233147AbiCINTk (ORCPT ); Wed, 9 Mar 2022 08:19:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39316 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233090AbiCINTY (ORCPT ); Wed, 9 Mar 2022 08:19:24 -0500 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60A6A17927C for ; Wed, 9 Mar 2022 05:18:01 -0800 (PST) Received: by mail-wr1-x433.google.com with SMTP id x15so2937280wru.13 for ; Wed, 09 Mar 2022 05:18:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Q47Bc6EUgs/uL91pRbMV5QmlkFSaTGuv0FEKZptNJvA=; b=HY8Nsw2/RtoRfd/epI9wuECoPJ60v+IefF6Ev0z4yl70jGUHRqy6BCgQ6IPaUp54CY 6Q/kFTpDhLCyYGe419UxGFI4b9YNeHyvarIhKvgqR0JvXSfTM6zEojTrJdN86YL5M3iZ 5k+w+1etHcQukQR4/MNkbcD4b0TFCxBZPwylUNpgcqy/YQvopKGIcx5m7W6jxP5WWAbr kp8x4GtN+MhbrOyGUCCiIzr3NUvXAQ6wAfp9XbQbRR6YsJruCz4wRpElaioEnk0kASEe hYsWC16MWKwtm49FXk7jhIeY8Zp/NqgPbOhNwW0j+RxYXXmYZ6rhJ7icGEcwTWzGtTkp qiLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Q47Bc6EUgs/uL91pRbMV5QmlkFSaTGuv0FEKZptNJvA=; b=fwqhEdXTGmODEMQnjojic1cMKYTSWonP5BXbjh+f6+L/sZzRaTw2saSB2nqNrxyB2B S73DucqA61bVtxoIMJbURuLtop6jUU4GTJDG9F0tdqgw354E54FScuRH6dAsCE6KRv08 YkxHtTkwYjGLLcQ2Eo6Niq4wTtWBTNvd0C9e8skyFZlbkz3w7+jM2xtVxeZhxKY90F+j JerS6ZzS1L/1RE89DPzkZIsA8nnRkZw/11F1Q+uToN48MVMZFFk5+vOzWjOBvcBoTS8R iC0WJZwkPjoYRwRMfwlLR2ELWXEaKmSW+/bw6Fj3c2nPnmiiei8w7vGdn8uIZFEfDVEx M3ew== X-Gm-Message-State: AOAM532/3Ah2mKEJe2V1VBXRibPj3R/VxlQ+g88J+kdfpV45f7HAlGxZ iuYNSqC44qRI+kag44omzOWaA2QWg1fT+A== X-Google-Smtp-Source: ABdhPJzu8j5SFSYrsmXslWTNnp0B08YnLq0uP4ngFas8m51+j7CNUq8QLWHhU3frQEAenr69G4DRhw== X-Received: by 2002:a05:6000:1448:b0:1f0:6620:968f with SMTP id v8-20020a056000144800b001f06620968fmr16340910wrx.714.1646831879672; Wed, 09 Mar 2022 05:17:59 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:59 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 18/24] revisions API: have release_revisions() release "grep_filter" Date: Wed, 9 Mar 2022 14:16:48 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "grep_filter" in the "struct ref_info". Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 1 + 1 file changed, 1 insertion(+) diff --git a/revision.c b/revision.c index 6c83a715dee..f51a60b2a96 100644 --- a/revision.c +++ b/revision.c @@ -2953,6 +2953,7 @@ void release_revisions(struct rev_info *revs) object_array_clear(&revs->pending); release_revisions_cmdline(&revs->cmdline); release_revisions_mailmap(revs->mailmap); + free_grep_patterns(&revs->grep_filter); } static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) From patchwork Wed Mar 9 13:16:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775072 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 25A1FC433EF for ; Wed, 9 Mar 2022 13:18:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233130AbiCINTi (ORCPT ); Wed, 9 Mar 2022 08:19:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233069AbiCINTZ (ORCPT ); Wed, 9 Mar 2022 08:19:25 -0500 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6F9E21795C7 for ; Wed, 9 Mar 2022 05:18:02 -0800 (PST) Received: by mail-wr1-x42d.google.com with SMTP id u1so2962166wrg.11 for ; Wed, 09 Mar 2022 05:18:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wxx/+ZMnHehDYFTPEl5t82Fr+dvv6O4Oev9AdqK0R9k=; b=bk4NwHTwAbap3TN4dRrSCpCuAVmnCpt0JGH2RLGHh1vFw9zL0Ejh2MkrjtgHgko8bi BzddEdZhe0hjdRIG9SRRNSeoQ2jk7zov6J36wpULu7D7A0u+aJZcFLmPSypK5JucRhs2 z0nNFYLEbP6wTwvLetczeEqgMLyCDhuAXLL6X1GAngC1gtbOOxBd8VISEDXXbBnEtScI buscvXTvxUyQzqPnZyNGa79lze1S0iu32RETdoAAw5J77BNz59Jg6DPAfi6cWa910x86 qtlYzIW0JYGptRkgMtlU7ypTHRvN0WVioDUd5TmJbbTugr6LGMzJoVYSUfaeMRVp1MA5 Z8BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wxx/+ZMnHehDYFTPEl5t82Fr+dvv6O4Oev9AdqK0R9k=; b=x4xysHakKVplHliwwiH9SXyMIfvoIHrGzkbTRGoi6pcDnKopyKAyYYoit4vTZHskie dV91OKSKoNNoMa+Yd+/yZkFlh9zNTcms7r3hoA/+F/zMURjIBTIjsF6qjyJvZxWz+Iej Z5cUEJ+3TvuUD/ihR6vtAJk9D9z0TRXYuu8vqAxaP/+WrdKnwZ2bzAunZaBa75M1/9AP 9t4DaTIh20/j9ilAG5MPRZNn8Z5/9p4sisJRJMQuaajy4u9fC8s8jNU+3/yYtdAIM2SW wfu2HMZe7v1gUt5/TS/eeu9GQaKnZEfXb4qZzkOjMtmrn3GOmzvgv2ItrC89e1gBDwHd ZVsg== X-Gm-Message-State: AOAM533HWR6QtlnBTaZGlR9jSZZBivQsHLPTumKlJhOqongnmvbKAuxB JGUlzYF/D2UJz1X6NQiykphKRej/vaN0Xw== X-Google-Smtp-Source: ABdhPJyyOcSv6+d7EOzTwauj/e6tvNOHRKGfg3FxksE7RqnoAj+H0nGUIlLGU8ZeEiQkyiUsAQbA5w== X-Received: by 2002:adf:f48d:0:b0:1ed:e2d7:d5e0 with SMTP id l13-20020adff48d000000b001ede2d7d5e0mr15776319wro.252.1646831880615; Wed, 09 Mar 2022 05:18:00 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.17.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:17:59 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 19/24] revisions API: have release_revisions() release "prune_data" Date: Wed, 9 Mar 2022 14:16:49 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "prune_data" in the "struct ref_info". This means that any code that calls "release_revisions()" already can get rid of adjacent calls to clear_pathspec(). Signed-off-by: Ævar Arnfjörð Bjarmason --- add-interactive.c | 2 -- builtin/add.c | 1 - builtin/stash.c | 2 -- diff-lib.c | 1 - revision.c | 1 + wt-status.c | 2 -- 6 files changed, 1 insertion(+), 8 deletions(-) diff --git a/add-interactive.c b/add-interactive.c index 13d5ec6f49f..bd612270001 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -566,8 +566,6 @@ static int get_modified_files(struct repository *r, run_diff_files(&rev, 0); } - if (ps) - clear_pathspec(&rev.prune_data); release_revisions(&rev); } hashmap_clear_and_free(&s.file_map, struct pathname_entry, ent); diff --git a/builtin/add.c b/builtin/add.c index 115a26ea633..fc729e14c17 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -142,7 +142,6 @@ int add_files_to_cache(const char *prefix, rev.diffopt.flags.override_submodule_config = 1; rev.max_count = 0; /* do not compare unmerged paths with stage #2 */ run_diff_files(&rev, DIFF_RACY_IS_MODIFIED); - clear_pathspec(&rev.prune_data); release_revisions(&rev); return !!data.add_errors; } diff --git a/builtin/stash.c b/builtin/stash.c index b9fe6f7c712..53bfa82eeb1 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1072,7 +1072,6 @@ static int check_changes_tracked_files(const struct pathspec *ps) } done: - clear_pathspec(&rev.prune_data); release_revisions(&rev); return ret; } @@ -1284,7 +1283,6 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps done: discard_index(&istate); - clear_pathspec(&rev.prune_data); release_revisions(&rev); strbuf_release(&diff_output); remove_path(stash_index_path.buf); diff --git a/diff-lib.c b/diff-lib.c index 68858a39964..255abb4959f 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -641,7 +641,6 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt) if (diff_cache(&revs, tree_oid, NULL, 1)) exit(128); - clear_pathspec(&revs.prune_data); release_revisions(&revs); return 0; } diff --git a/revision.c b/revision.c index f51a60b2a96..290700ea66f 100644 --- a/revision.c +++ b/revision.c @@ -2952,6 +2952,7 @@ void release_revisions(struct rev_info *revs) release_revisions_commit_list(revs); object_array_clear(&revs->pending); release_revisions_cmdline(&revs->cmdline); + clear_pathspec(&revs->prune_data); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); } diff --git a/wt-status.c b/wt-status.c index aaef10451f3..4e6b2ca9b82 100644 --- a/wt-status.c +++ b/wt-status.c @@ -616,7 +616,6 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) rev.diffopt.rename_score = s->rename_score >= 0 ? s->rename_score : rev.diffopt.rename_score; copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_files(&rev, 0); - clear_pathspec(&rev.prune_data); release_revisions(&rev); } @@ -655,7 +654,6 @@ static void wt_status_collect_changes_index(struct wt_status *s) copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_index(&rev, 1); release_revisions(&rev); - clear_pathspec(&rev.prune_data); } static int add_file_to_list(const struct object_id *oid, From patchwork Wed Mar 9 13:16:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775071 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CCBE8C433FE for ; Wed, 9 Mar 2022 13:18:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233120AbiCINTh (ORCPT ); Wed, 9 Mar 2022 08:19:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40588 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233128AbiCINT0 (ORCPT ); Wed, 9 Mar 2022 08:19:26 -0500 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4AC101795D2 for ; Wed, 9 Mar 2022 05:18:03 -0800 (PST) Received: by mail-wm1-x329.google.com with SMTP id q20so1356514wmq.1 for ; Wed, 09 Mar 2022 05:18:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=v1oKUhqigOW/6kmAsfsBgpkBTUZApUX8Azz2qrByCTw=; b=LBKgvbtPeLVnOiFH6J7kdYvphhisP/9Rxq9JPiawqKUFaS05K5wYKF8xbhNyjlnZOC /el4xzymWMFryEUJ37L1/Gh0DMBo5AhrhCEuM+288M6xSRmgQQL8Q7PW2+4aE15fnl4n UlTSN4x6ZGHebWNTBi0Ko+firWk8oYRa9llDkrloOlPR5hcqwDkpJnwjBqDZxE5p24cb 8qL2jti7xIBM8B8WV62NSscDpB9k410pv9cPre9YJmSyZN9p1eZ52XtrLpLUEhxJdGod xUueTDowZgviJKOz266LtpaM0SDQURSAzzI0tkyerQsv4e1x/enR+THdxbfoBSQW4Eui URSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=v1oKUhqigOW/6kmAsfsBgpkBTUZApUX8Azz2qrByCTw=; b=4LMj2Vocy3B08svYIdtGd62q6BSLAiLMd/LHSp4ejePTFUGpHm08liQZ7DNep6jKYI R9bGWLqA2vopJAoxAks9LjAojwGqeLZN0tZBKgzzVtcWNpu3ZVX3l5iqMJ76VUUK6gQN ZdcK9TzSuQdACxBqOKYyikPqMi/v0Y06eWkMoZcp8ekTGv7/8m2SSmqeBaDpfRH5C+sc SGjjYgM0x6gc6hEsJluOiDgPjkRJSOsQul1srEv1QyjPn/oVNY8Ik1gxuLX8SbxemGpV rVrMHXhWRNTZ5vW0/UeF+RUXDG7AjsdFYkXZRhaKN4yqMTZPTosZHTDGciBUv8cmj+BL VAXQ== X-Gm-Message-State: AOAM530bzRcGfERJYHGu5i6TZeNZ2qmlysI9f2FuNj/3/i8gPqY2La3M WCEpBRYT6giXdcrleZ0K1gRPe0t6yD1PqQ== X-Google-Smtp-Source: ABdhPJwYf6MUIPIVs4ROvqVIRKP0SToFSYsWxSoboTcelCSG8l+nf3ALyslEwk4FWBjn8aW2FGxTsA== X-Received: by 2002:a05:600c:694:b0:389:9c6e:c265 with SMTP id a20-20020a05600c069400b003899c6ec265mr3359092wmn.5.1646831881477; Wed, 09 Mar 2022 05:18:01 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.18.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:18:00 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 20/24] revisions API: clear "boundary_commits" in release_revisions() Date: Wed, 9 Mar 2022 14:16:50 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Clear the "boundary_commits" object_array in release_revisions(). This makes a *lot* of tests pass under SANITIZE=leak, including most of the t/t[0-9]*git-svn*.sh tests. This includes the tests we had false-positive passes on before my 6798b08e848 (perl Git.pm: don't ignore signalled failure in _cmd_close(), 2022-02-01), now they pass for real. Since there are 66 tests matching t/t[0-9]*git-svn*.sh it's easier to list those that don't pass than to touch most of those 66. So let's introduce a "TEST_FAILS_SANITIZE_LEAK=true", which if set in the tests won't cause lib-git-svn.sh to set "TEST_PASSES_SANITIZE_LEAK=true. This change also marks all the tests that we removed "TEST_FAILS_SANITIZE_LEAK=true" from in an earlier commit due to removing the UNLEAK() from cmd_format_patch(), we can now assert that its API use doesn't leak any "struct rev_info" memory. Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 1 + t/t4021-format-patch-numbered.sh | 1 + t/t4028-format-patch-mime-headers.sh | 2 ++ t/t4036-format-patch-signer-mime.sh | 1 + t/t4122-apply-symlink-inside.sh | 1 + t/t4126-apply-empty.sh | 1 + t/t6110-rev-list-sparse.sh | 1 + t/t9001-send-email.sh | 1 + 8 files changed, 9 insertions(+) diff --git a/revision.c b/revision.c index 290700ea66f..a73e76bed4a 100644 --- a/revision.c +++ b/revision.c @@ -2952,6 +2952,7 @@ void release_revisions(struct rev_info *revs) release_revisions_commit_list(revs); object_array_clear(&revs->pending); release_revisions_cmdline(&revs->cmdline); + object_array_clear(&revs->boundary_commits); clear_pathspec(&revs->prune_data); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); diff --git a/t/t4021-format-patch-numbered.sh b/t/t4021-format-patch-numbered.sh index 9be65fd4440..1219aa226dc 100755 --- a/t/t4021-format-patch-numbered.sh +++ b/t/t4021-format-patch-numbered.sh @@ -5,6 +5,7 @@ test_description='Format-patch numbering options' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4028-format-patch-mime-headers.sh b/t/t4028-format-patch-mime-headers.sh index 204ba673cb5..60cb819c42e 100755 --- a/t/t4028-format-patch-mime-headers.sh +++ b/t/t4028-format-patch-mime-headers.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='format-patch mime headers and extra headers do not conflict' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'create commit with utf-8 body' ' diff --git a/t/t4036-format-patch-signer-mime.sh b/t/t4036-format-patch-signer-mime.sh index 98d9713d8b2..48655bcc789 100755 --- a/t/t4036-format-patch-signer-mime.sh +++ b/t/t4036-format-patch-signer-mime.sh @@ -2,6 +2,7 @@ test_description='format-patch -s should force MIME encoding as needed' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4122-apply-symlink-inside.sh b/t/t4122-apply-symlink-inside.sh index aa52de401b9..96965373036 100755 --- a/t/t4122-apply-symlink-inside.sh +++ b/t/t4122-apply-symlink-inside.sh @@ -4,6 +4,7 @@ test_description='apply to deeper directory without getting fooled with symlink' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4126-apply-empty.sh b/t/t4126-apply-empty.sh index 66a7ba8ab8f..ece9fae207d 100755 --- a/t/t4126-apply-empty.sh +++ b/t/t4126-apply-empty.sh @@ -2,6 +2,7 @@ test_description='apply empty' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t6110-rev-list-sparse.sh b/t/t6110-rev-list-sparse.sh index 13c1da53528..ddefc7f24ee 100755 --- a/t/t6110-rev-list-sparse.sh +++ b/t/t6110-rev-list-sparse.sh @@ -4,6 +4,7 @@ test_description='operations that cull histories in unusual ways' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index 84d0f40d76a..dfa6b20f7a6 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -4,6 +4,7 @@ test_description='git send-email' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # May be altered later in the test From patchwork Wed Mar 9 13:16:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775070 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 07820C433EF for ; Wed, 9 Mar 2022 13:18:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233105AbiCINTf (ORCPT ); Wed, 9 Mar 2022 08:19:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233131AbiCINT0 (ORCPT ); Wed, 9 Mar 2022 08:19:26 -0500 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1BD6F1795E8 for ; Wed, 9 Mar 2022 05:18:04 -0800 (PST) Received: by mail-wr1-x42d.google.com with SMTP id x15so2937552wru.13 for ; Wed, 09 Mar 2022 05:18:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bHbG4oiF4ptKRe0NOAG1XZcB4R8tEfzJaua8eSmHwKk=; b=qF67OVJRQHEewBcj9IvgAjisMALdpaTB8kJm9dV/wC696Jk/Qgmgq1rHAeY2d6BZCr xvvwmTiI5bUc4Ts+cvGEaqmiH5yfCgNwhzYHj7Wcu908/V8WHeAhSyk4Lr8BCzYB6ACp Btyxu/B6MxMoJ354P4LV1fXQEY1Oqg1rmfBTOhb3Kd6aX5dpaG5ARcO95UYBHUxAlcIo y4LguMEL//SL+6PjM3Su/PSArP2n/mW0h7ik4qdYx3K5gTIAm5BMtrkXuy7hbdnWi8Y4 ybw5SAsYGQ2vctnllpucBp0Q52Gab3+8vbezBU8RdYc8ow2upXXslXV8zHMfzChWS9AL tHlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bHbG4oiF4ptKRe0NOAG1XZcB4R8tEfzJaua8eSmHwKk=; b=ENED99bX6SUyUFgVt1MS3bQQhgLvuGkXDGcEzMTUO5aPQqqeD3TDkclB4cORV3g3k3 q4d5NFEtJ7AjTYVQ98EgMFvQLnrVjAK0DV1Bdjf0C5sXcY9IcZ0E9O8exKsUYy/yaBf/ TlVMRM4ihQmg3yNJxKc+ooI2TZ5Jp5AAHYh8PCIgkprdDcprZoP4v9ktfwQGnJBOYJAX /wnfTiSbq2uiD0XdLGcQSldekjM3sSHH3aXy+fT/ECLqyjvaw71faRBlWva9+OFTp9Yv mscuBSnmKapbgLYDivCY0c4+Dds3ehXReQDHU+hxqoLY2f28JCxmbmoWhD311B5cJTDT xL4Q== X-Gm-Message-State: AOAM533OV5mAEeZN5dGGg45U4HdUE91coUwytCcOTjbSXIarH5x127CB 2nFzW6Ytcc+OPbSxbBhPv9ACN4FGteBECA== X-Google-Smtp-Source: ABdhPJxq6LP3+C1hdmm7bX1v8VKgY+0XqJ7ItroSAoBnX7t3pYt3FEiGg95llEnEsQ3CjOd43B+mhw== X-Received: by 2002:adf:db82:0:b0:1ed:bf4b:e327 with SMTP id u2-20020adfdb82000000b001edbf4be327mr15720995wri.527.1646831882408; Wed, 09 Mar 2022 05:18:02 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.18.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:18:01 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 21/24] revisions API: release "reflog_info" in release revisions() Date: Wed, 9 Mar 2022 14:16:51 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add a missing reflog_walk_info_release() to "reflog-walk.c" and use it in release_revisions(). Signed-off-by: Ævar Arnfjörð Bjarmason --- reflog-walk.c | 26 ++++++++++++++++++++++++-- reflog-walk.h | 1 + revision.c | 1 + t/t0100-previous.sh | 1 + t/t1401-symbolic-ref.sh | 2 ++ t/t1411-reflog-show.sh | 1 + t/t1412-reflog-loop.sh | 2 ++ t/t1415-worktree-refs.sh | 1 + 8 files changed, 33 insertions(+), 2 deletions(-) diff --git a/reflog-walk.c b/reflog-walk.c index 8ac4b284b6b..4322228d122 100644 --- a/reflog-walk.c +++ b/reflog-walk.c @@ -7,7 +7,7 @@ #include "reflog-walk.h" struct complete_reflogs { - char *ref; + const char *ref; const char *short_ref; struct reflog_info { struct object_id ooid, noid; @@ -50,10 +50,17 @@ static void free_complete_reflog(struct complete_reflogs *array) free(array->items[i].message); } free(array->items); - free(array->ref); + free((char *)array->ref); + free((char *)array->short_ref); free(array); } +static void complete_reflogs_clear(void *util, const char *str) +{ + struct complete_reflogs *array = util; + free_complete_reflog(array); +} + static struct complete_reflogs *read_complete_reflog(const char *ref) { struct complete_reflogs *reflogs = @@ -116,6 +123,21 @@ void init_reflog_walk(struct reflog_walk_info **info) (*info)->complete_reflogs.strdup_strings = 1; } +void reflog_walk_info_release(struct reflog_walk_info *info) +{ + size_t i; + + if (!info) + return; + + for (i = 0; i < info->nr; i++) + free(info->logs[i]); + string_list_clear_func(&info->complete_reflogs, + complete_reflogs_clear); + free(info->logs); + free(info); +} + int add_reflog_for_walk(struct reflog_walk_info *info, struct commit *commit, const char *name) { diff --git a/reflog-walk.h b/reflog-walk.h index e9e00ffd479..8076f10d9fb 100644 --- a/reflog-walk.h +++ b/reflog-walk.h @@ -8,6 +8,7 @@ struct reflog_walk_info; struct date_mode; void init_reflog_walk(struct reflog_walk_info **info); +void reflog_walk_info_release(struct reflog_walk_info *info); int add_reflog_for_walk(struct reflog_walk_info *info, struct commit *commit, const char *name); void show_reflog_message(struct reflog_walk_info *info, int, diff --git a/revision.c b/revision.c index a73e76bed4a..ec6cd662467 100644 --- a/revision.c +++ b/revision.c @@ -2956,6 +2956,7 @@ void release_revisions(struct rev_info *revs) clear_pathspec(&revs->prune_data); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); + reflog_walk_info_release(revs->reflog_info); } static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) diff --git a/t/t0100-previous.sh b/t/t0100-previous.sh index 69beb59f627..a16cc3d2983 100755 --- a/t/t0100-previous.sh +++ b/t/t0100-previous.sh @@ -5,6 +5,7 @@ test_description='previous branch syntax @{-n}' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'branch -d @{-1}' ' diff --git a/t/t1401-symbolic-ref.sh b/t/t1401-symbolic-ref.sh index 132a1b885ac..9fb0b90f252 100755 --- a/t/t1401-symbolic-ref.sh +++ b/t/t1401-symbolic-ref.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='basic symbolic-ref tests' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # If the tests munging HEAD fail, they can break detection of diff --git a/t/t1411-reflog-show.sh b/t/t1411-reflog-show.sh index 0bb319b944a..3770ceffafd 100755 --- a/t/t1411-reflog-show.sh +++ b/t/t1411-reflog-show.sh @@ -4,6 +4,7 @@ test_description='Test reflog display routines' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t1412-reflog-loop.sh b/t/t1412-reflog-loop.sh index 977603f7f1c..ff30874f940 100755 --- a/t/t1412-reflog-loop.sh +++ b/t/t1412-reflog-loop.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='reflog walk shows repeated commits again' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup commits' ' diff --git a/t/t1415-worktree-refs.sh b/t/t1415-worktree-refs.sh index a3e6ea08088..3b531842dd4 100755 --- a/t/t1415-worktree-refs.sh +++ b/t/t1415-worktree-refs.sh @@ -2,6 +2,7 @@ test_description='per-worktree refs' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' From patchwork Wed Mar 9 13:16:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775078 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AB4A8C433F5 for ; Wed, 9 Mar 2022 13:18:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233205AbiCINTr (ORCPT ); Wed, 9 Mar 2022 08:19:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233143AbiCINT0 (ORCPT ); Wed, 9 Mar 2022 08:19:26 -0500 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C2AD1795F7 for ; Wed, 9 Mar 2022 05:18:05 -0800 (PST) Received: by mail-wm1-x32f.google.com with SMTP id 19so1345385wmy.3 for ; Wed, 09 Mar 2022 05:18:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xBB4FmwGFyw3PD995/YaYVF2NUNg1FlTppFzSnKnrJY=; b=RJlZqYB8m0b2nBSv/rGjcmpme5hEgTaIeD4wi/3wOiZ1Z3uD+KGuPcayHKs7uADbEn wD8hTk8Rg//V90Rog48iKw3cLRo3eI8S0QO8sCbZYu0iTT+dxKCOkMMPzCxDA/7zhYX/ +K/O9+5bh12p4LupfNx8Uv8Mhsdofj4M1YfZQUt3mH8+xXg41qZcZLqmAQz3X2xfPc0K yNvqL99Batywx0ZKaWs4Wq/nx7gamPFMVEU7B4RtvutWPw7G9Z6YtChcWupDjJMcHj1T uLdd0EDslTqWq4WPBEyLNcGjykOp069mxD+jQ9JHHJFai1yj23s1SaQMEDxX5ZDCVuOZ c/7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xBB4FmwGFyw3PD995/YaYVF2NUNg1FlTppFzSnKnrJY=; b=HL3/AZxIm6sE+AL9YFEzkNkxK4UGaG4wpu69WEYZuE+ROhqCVRnQhDA6vT/68azXyP KI20lyyMrnYShbuccInB4WdjRWLqLdwUfpylIboQ5OUPobMSB/cpxHL2r68eUeAY0Zqp IElxR/2G3ScTW31AFn+P6vD5Q2qHum64RSM8VYiowzbOpC1osgBpFIagAHSwJjpZf8wC vp2dXWU2TkMioEEjI7kNoORv1CUTWqlx4+vl1H9I+VZKD/rbKBOx8+hZcDXEYc0yM6jg O+xg6aOwWINYwl6sGSUwtv6aSXPPHBvqcUMcV4cnO7fTz70URbHvYg/OIniIe39SJQyL 6lkA== X-Gm-Message-State: AOAM531Q0rcPgS/cMtjkEovbYQBnba0jCGWdqi7Qi4RlQRSx+E3GXjZi 2ut6wNlVFzuESzd8uGMgX4bKDqEtMxiI7Q== X-Google-Smtp-Source: ABdhPJwvmGhXHJltMKyU14i/CF8TDgBv5JoaP6ibm2hDfcJzuzHn1OBevXfxI9TOuGa65qDOC5osJQ== X-Received: by 2002:a1c:4e15:0:b0:387:3661:e857 with SMTP id g21-20020a1c4e15000000b003873661e857mr7517800wmh.94.1646831883344; Wed, 09 Mar 2022 05:18:03 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.18.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:18:02 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 22/24] revisions API: call diff_free(&revs->pruning) in revisions_release() Date: Wed, 9 Mar 2022 14:16:52 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Call diff_free() on the "pruning" member of "struct rev_info". We'll handle the "diffopt" member of the same type some other time, doing so will require us to untangle the "no_free" conditions I added in e900d494dcf (diff: add an API for deferred freeing, 2021-02-11). Even without "diffopt" addressing leaks in "pruning" makes several tests pass under SANITIZE=leak. This was also the last missing piece that allows us to remove the UNLEAK() in "cmd_diff" and "cmd_diff_index", which allows us to use those commands as a canary for general leaks in the revisions API. See [1] for further rationale, and 886e1084d78 (builtin/: add UNLEAKs, 2017-10-01) for the commit that added the UNLEAK() there. 1. https://lore.kernel.org/git/220218.861r00ib86.gmgdl@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/diff-index.c | 1 - builtin/diff.c | 1 - revision.c | 2 ++ t/t2016-checkout-patch.sh | 1 + t/t4039-diff-assume-unchanged.sh | 1 + t/t4206-log-follow-harder-copies.sh | 2 ++ t/t6131-pathspec-icase.sh | 2 ++ 7 files changed, 8 insertions(+), 2 deletions(-) diff --git a/builtin/diff-index.c b/builtin/diff-index.c index 3a83183c312..7d158af6b6d 100644 --- a/builtin/diff-index.c +++ b/builtin/diff-index.c @@ -70,7 +70,6 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix) return -1; } result = run_diff_index(&rev, option); - UNLEAK(rev); result = diff_result_code(&rev.diffopt, result); release_revisions(&rev); return result; diff --git a/builtin/diff.c b/builtin/diff.c index dd48336da56..f539132ac68 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -594,7 +594,6 @@ int cmd_diff(int argc, const char **argv, const char *prefix) result = diff_result_code(&rev.diffopt, result); if (1 < rev.diffopt.skip_stat_unmatch) refresh_index_quietly(); - UNLEAK(rev); release_revisions(&rev); UNLEAK(ent); UNLEAK(blob); diff --git a/revision.c b/revision.c index ec6cd662467..81f4a36fc9d 100644 --- a/revision.c +++ b/revision.c @@ -2956,6 +2956,8 @@ void release_revisions(struct rev_info *revs) clear_pathspec(&revs->prune_data); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); + /* TODO (need to handle "no_free"): diff_free(&revs->diffopt) */ + diff_free(&revs->pruning); reflog_walk_info_release(revs->reflog_info); } diff --git a/t/t2016-checkout-patch.sh b/t/t2016-checkout-patch.sh index abfd586c32b..83c246ab0a5 100755 --- a/t/t2016-checkout-patch.sh +++ b/t/t2016-checkout-patch.sh @@ -2,6 +2,7 @@ test_description='git checkout --patch' +TEST_PASSES_SANITIZE_LEAK=true . ./lib-patch-mode.sh test_expect_success PERL 'setup' ' diff --git a/t/t4039-diff-assume-unchanged.sh b/t/t4039-diff-assume-unchanged.sh index 0eb0314a8b3..78090e6852d 100755 --- a/t/t4039-diff-assume-unchanged.sh +++ b/t/t4039-diff-assume-unchanged.sh @@ -2,6 +2,7 @@ test_description='diff with assume-unchanged entries' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # external diff has been tested in t4020-diff-external.sh diff --git a/t/t4206-log-follow-harder-copies.sh b/t/t4206-log-follow-harder-copies.sh index 4871a5dc92f..33ecf82c7f9 100755 --- a/t/t4206-log-follow-harder-copies.sh +++ b/t/t4206-log-follow-harder-copies.sh @@ -6,6 +6,8 @@ test_description='Test --follow should always find copies hard in git log. ' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-diff.sh diff --git a/t/t6131-pathspec-icase.sh b/t/t6131-pathspec-icase.sh index 39fc3f6769b..770cce026cb 100755 --- a/t/t6131-pathspec-icase.sh +++ b/t/t6131-pathspec-icase.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='test case insensitive pathspec limiting' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh if test_have_prereq CASE_INSENSITIVE_FS From patchwork Wed Mar 9 13:16:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775079 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01FEFC433F5 for ; Wed, 9 Mar 2022 13:18:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233207AbiCINTu (ORCPT ); Wed, 9 Mar 2022 08:19:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40628 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233144AbiCINT0 (ORCPT ); Wed, 9 Mar 2022 08:19:26 -0500 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1720A179A01 for ; Wed, 9 Mar 2022 05:18:06 -0800 (PST) Received: by mail-wm1-x32d.google.com with SMTP id r187-20020a1c2bc4000000b003810e6b192aso1454294wmr.1 for ; Wed, 09 Mar 2022 05:18:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aIrXygs4o+TPlfEPMygxwNEAcKRGKrD54ak/UVSj+Og=; b=G/NYdcnkqKIpTUXooT8dtcMEmWF0fh/RiC4Adj8/Ns+87C0zGZ15uhIr3WKknhE0uL wnJWAjQGpudmlp9Mt4PeF1KoSHcDTuQTm+k8/djf+5xbyOXyJ5pSo8c5+gMj44HlD18V QM62N1pAwoMcduuVO6u0hFuMD82X8Q9jo+VvG2VyBjpDHxYrbK8bjykhCduBNEmwxmT6 Lge/aKxjYxGlV5mAP4M90k/5iqpDo/Mw7SuwafHLk51K8aKFECfooJnXv21alRICVgHV BuZUz6iHDFp4NFaSlmW2CY17zhkjnP6qySV+yZ+8wFkhhbyM4KcTLp/xlN/WVXzAtAXz rPfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aIrXygs4o+TPlfEPMygxwNEAcKRGKrD54ak/UVSj+Og=; b=zGP8GHaXm5qq2RSi1umiZ1AOiauAgh+t8tKHpZ9Pmu6Cg7eOjQ5OItCfqFr59HLlny 1zBOxTHZJ6T3ZGLVjaq8zBQWv6gPQIucAOk3NJItO9rKFHp2CxJ1DdVx90e7zVfa/TVM eksJ4ySzlaZRZOYGLIcuLcYqq/744+705VVkPg3NuWN3lEa3aUnpQbqd6nrAY8tbMUQi pIQZUUpSDCb/oqq4GrfqtnJYXMb/mijgd9M/8hWdClHUhY/Glc0AhxYsN6DduViHEFyh VaWn6m/sXOpRB/wImS7lENVK0jL7VA9h9p7+/IgRVj83NJ9Zqhv2nQGggZ5XgKzOInxP V4Ag== X-Gm-Message-State: AOAM531sIknDu3Jo/xx4fxdBMhrt8UKvbQJ28HDfYJMnJaDfwxo9bjHo jdeR7PRoLOo8ycXgjOYt+TJO04nkgufEQw== X-Google-Smtp-Source: ABdhPJwFYwHIBp1qfFYPv2rR364toeNkMjNdnIT/gsV/8ImUH3zdJTIP9uHQFOLpc0RlxXAG2c+RaQ== X-Received: by 2002:a05:600c:27cb:b0:381:400d:3bba with SMTP id l11-20020a05600c27cb00b00381400d3bbamr7644889wmb.60.1646831884348; Wed, 09 Mar 2022 05:18:04 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.18.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:18:03 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 23/24] revisions API: have release_revisions() release "date_mode" Date: Wed, 9 Mar 2022 14:16:53 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "date_mode" in the "struct ref_info". This uses the date_mode_release() function added in 974c919d36d (date API: add and use a date_mode_release(), 2022-02-16). As that commit notes "t7004-tag.sh" tests for the leaks that are being fixed here. That test now fails "only" 44 tests, instead of the 46 it failed before this change. Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 1 + 1 file changed, 1 insertion(+) diff --git a/revision.c b/revision.c index 81f4a36fc9d..9d03e7805ff 100644 --- a/revision.c +++ b/revision.c @@ -2954,6 +2954,7 @@ void release_revisions(struct rev_info *revs) release_revisions_cmdline(&revs->cmdline); object_array_clear(&revs->boundary_commits); clear_pathspec(&revs->prune_data); + date_mode_release(&revs->date_mode); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); /* TODO (need to handle "no_free"): diff_free(&revs->diffopt) */ From patchwork Wed Mar 9 13:16:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12775080 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2EADBC433EF for ; Wed, 9 Mar 2022 13:18:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233209AbiCINTv (ORCPT ); Wed, 9 Mar 2022 08:19:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40808 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233150AbiCINT0 (ORCPT ); Wed, 9 Mar 2022 08:19:26 -0500 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 03CB51637F0 for ; Wed, 9 Mar 2022 05:18:07 -0800 (PST) Received: by mail-wr1-x430.google.com with SMTP id q14so3015399wrc.4 for ; Wed, 09 Mar 2022 05:18:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KQApnMwuWLOJ2aBYSiR9ITMkoMHBKZfKETjSveY62Ik=; b=VCjFZ3HVbh49Ma2vNWaylvt8T0tEeztyL/GrRh3HilzyYQUZPDevhJonU8mv47CZ9N ZoN56+s2llAPFZDPKxRTyVTvU+yAoruzHfbZBaeBUYGFqh2BcezMBHQO179SYTTDkPgR PCiQvSyBfMv4KgI77sbaCCcG5UWRYXMAwpA314mFg83OArKUErjc8ElC4Qh63xBnaQJn G6+wIX35L6KFGiLNOLi1IXVaq9Q4g0vAqpwLNzIOxEpNWkje9HmIFNm6x3a94TH2Pe9P kWX+yqmJPZAzvmIP7h8tFj9mpSTq8Ea69FiKZUJu8wfs/sl/lxV2FyOlbjavgeNRfSkX Ubqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KQApnMwuWLOJ2aBYSiR9ITMkoMHBKZfKETjSveY62Ik=; b=fakTxKQdxUSWu1/o4WUiUdT2CnzTb5ZfHfgT+VYS6h0AeCdfHDpelEoW9GzCN3Tfmu pB4ja07AitvYaigQdSEjy/gzTsNK2JdIyHaeCz/4EfksjhqzH2+5kYuGMrnaZuvqZyUC cYCBWLz1NT9I2r/x3bWtT+e/KlQLsTRSbjQWX5sbH5egTAnvOVuqNWlrUvpaP2+5jcf8 NTusIwxruJ+RQGLqjyX8iYMfCF5CCs0TB0+Qai1TMfnXgsKAQJthARLgpyk3cOvZFLkA fnOG/aHJQ//Q8Hlp+jBldr9+A7AUBs1XO0cRs5ga8T5W+DEqBPR39Ade6TcmDBqeh6IZ MVHg== X-Gm-Message-State: AOAM530bCJlJmHcU7SxIKomxyiFHthOATxEq8MHkvo0A1Zed/b1zGg0x j32y2vzlWZYcx48fqC0iKYAacEyrP6DDKQ== X-Google-Smtp-Source: ABdhPJyJgnKSZUEsWZ510t3znSSEuHd0R4GCeUefhnqyVoDjeKoQb8sxki3EMm5DDKqe7CYuWnqFpA== X-Received: by 2002:adf:e44b:0:b0:1f0:250a:d3ef with SMTP id t11-20020adfe44b000000b001f0250ad3efmr15874310wrm.402.1646831885266; Wed, 09 Mar 2022 05:18:05 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id i74-20020adf90d0000000b0020373ba7beesm2599988wri.0.2022.03.09.05.18.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Mar 2022 05:18:04 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH 24/24] revisions API: have release_revisions() release "topo_walk_info" Date: Wed, 9 Mar 2022 14:16:54 +0100 Message-Id: X-Mailer: git-send-email 2.35.1.1295.g6b025d3e231 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Refactor the existing reset_topo_walk() into a thin wrapper for a release_revisions_topo_walk_info() + resetting the member to "NULL", and call release_revisions_topo_walk_info() from release_revisions(). This fixes memory leaks that have been with us ever since "topo_walk_info" was added to revision.[ch] in f0d9cc4196a (revision.c: begin refactoring --topo-order logic, 2018-11-01). Due to various other leaks this makes no tests pass in their entirety, but e.g. before this running this on git.git: ./git -P log --pretty=tformat:"%P %H | %s" --parents --full-history --topo-order -3 -- README.md Would report under SANITIZE=leak: SUMMARY: LeakSanitizer: 531064 byte(s) leaked in 6 allocation(s). Now we'll free all of that memory. Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/revision.c b/revision.c index 9d03e7805ff..5a9400667df 100644 --- a/revision.c +++ b/revision.c @@ -2945,6 +2945,8 @@ static void release_revisions_mailmap(struct string_list *mailmap) free(mailmap); } +static void release_revisions_topo_walk_info(struct topo_walk_info *info); + void release_revisions(struct rev_info *revs) { if (!revs) @@ -2960,6 +2962,7 @@ void release_revisions(struct rev_info *revs) /* TODO (need to handle "no_free"): diff_free(&revs->diffopt) */ diff_free(&revs->pruning); reflog_walk_info_release(revs->reflog_info); + release_revisions_topo_walk_info(revs->topo_walk_info); } static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) @@ -3472,17 +3475,24 @@ static void compute_indegrees_to_depth(struct rev_info *revs, indegree_walk_step(revs); } -static void reset_topo_walk(struct rev_info *revs) +static void release_revisions_topo_walk_info(struct topo_walk_info *info) { - struct topo_walk_info *info = revs->topo_walk_info; - + if (!info) + return; clear_prio_queue(&info->explore_queue); clear_prio_queue(&info->indegree_queue); clear_prio_queue(&info->topo_queue); clear_indegree_slab(&info->indegree); clear_author_date_slab(&info->author_date); + free(info); +} + +static void reset_topo_walk(struct rev_info *revs) +{ + struct topo_walk_info *info = revs->topo_walk_info; - FREE_AND_NULL(revs->topo_walk_info); + release_revisions_topo_walk_info(info); + revs->topo_walk_info = NULL; } static void init_topo_walk(struct rev_info *revs)