From patchwork Fri Dec 8 14:53:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13485480 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="CfzIsWhX"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="P60Pjz7h" Received: from wout5-smtp.messagingengine.com (wout5-smtp.messagingengine.com [64.147.123.21]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EBD185251 for ; Fri, 8 Dec 2023 06:53:26 -0800 (PST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailout.west.internal (Postfix) with ESMTP id C86A73200A28; Fri, 8 Dec 2023 09:53:21 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Fri, 08 Dec 2023 09:53:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:sender :subject:subject:to:to; s=fm1; t=1702047201; x=1702133601; bh=0K B8yHQRfh7qieVzM8MgyP4GTYU6xovElQvFFjF5OmM=; b=CfzIsWhXiMpj+hQoKA aGyN/0yxn3fyZ40+2FcE0JykVV8uZ2XvYlngpERXNQufvjieFHde6tItBUe7ouuO ydm+pwHqH6cPgRMYiHD7Eb6UHM7DjwaR+g+YUY81VmVOEV6XfDbtUpgoz0Cd85qA hg+H9ZgxUqyMARC7wTsj9OEfYbQHmA6Jy7xWcTttFMxXDnEHdG50MBODK4e3OAGc 2bLuKIDUHo7jNNyiFtkjylzUsogkJ4OxsuIZ8FcrHOqe7XxcFWcjv2buy4NXeOkj yCxiQeSXl/++fb5IuGOFBSnWrrEyiCsLs+z5LILTLRJkefqQlmxoSsf8t4KG4B5P S+UQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:sender:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; t=1702047201; x=1702133601; bh=0KB8yHQRfh7qi eVzM8MgyP4GTYU6xovElQvFFjF5OmM=; b=P60Pjz7h/03Sd5qEf7CvNi9zRPEMn S3xNgd87uMGtefCi2fKCK0jC8mZUwFvQedmbgeM+dmsP3mlz6+wUsFK0VznfC4w1 YAcVygW3pPp3XAmCXb4l+fOUn5z4tMJMRl+hVLLMuCWfrd4Mq3pghx0gUkiaTAU5 uDPsaZ2fYzTluF90N2GIOKhF/ZrJLTDn4aXGGg/R2RKlRNzZBd6w4O8AU8xgi6Bw H9B5pebumnqljaHKncLqenH9+fqEld4ToHKNua0+1CrkygOoC54J7oXJAZMwi3hk 0250P5YjUr8d2SXfbctbhlRNQBpmWzF2agPOJl5fpruAoBhwsgGQ7oozg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrudekiedgjeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 8 Dec 2023 09:53:20 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 62057270 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Fri, 8 Dec 2023 14:51:50 +0000 (UTC) Date: Fri, 8 Dec 2023 15:53:18 +0100 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Han-Wen Nienhuys , Jonathan Nieder Subject: [PATCH v2 06/11] reftable/stack: reuse buffers when reloading stack Message-ID: References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: In `reftable_stack_reload_once()` we iterate over all the tables added to the stack in order to figure out whether any of the tables needs to be reloaded. We use a set of buffers in this context to compute the paths of these tables, but discard those buffers on every iteration. This is quite wasteful given that we do not need to transfer ownership of the allocated buffer outside of the loop. Refactor the code to instead reuse the buffers to reduce the number of allocations we need to do. Signed-off-by: Patrick Steinhardt --- reftable/stack.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/reftable/stack.c b/reftable/stack.c index f5d18a842a..2dd2373360 100644 --- a/reftable/stack.c +++ b/reftable/stack.c @@ -204,6 +204,7 @@ static int reftable_stack_reload_once(struct reftable_stack *st, char **names, reftable_calloc(sizeof(struct reftable_table) * names_len); int new_readers_len = 0; struct reftable_merged_table *new_merged = NULL; + struct strbuf table_path = STRBUF_INIT; int i; while (*names) { @@ -223,13 +224,10 @@ static int reftable_stack_reload_once(struct reftable_stack *st, char **names, if (!rd) { struct reftable_block_source src = { NULL }; - struct strbuf table_path = STRBUF_INIT; stack_filename(&table_path, st, name); err = reftable_block_source_from_file(&src, table_path.buf); - strbuf_release(&table_path); - if (err < 0) goto done; @@ -267,16 +265,13 @@ static int reftable_stack_reload_once(struct reftable_stack *st, char **names, for (i = 0; i < cur_len; i++) { if (cur[i]) { const char *name = reader_name(cur[i]); - struct strbuf filename = STRBUF_INIT; - stack_filename(&filename, st, name); + stack_filename(&table_path, st, name); reader_close(cur[i]); reftable_reader_free(cur[i]); /* On Windows, can only unlink after closing. */ - unlink(filename.buf); - - strbuf_release(&filename); + unlink(table_path.buf); } } @@ -288,6 +283,7 @@ static int reftable_stack_reload_once(struct reftable_stack *st, char **names, reftable_free(new_readers); reftable_free(new_tables); reftable_free(cur); + strbuf_release(&table_path); return err; }