From patchwork Sat Aug 15 17:37:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jean-No=C3=ABl_Avila_via_GitGitGadget?= X-Patchwork-Id: 11715807 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 79391618 for ; Sat, 15 Aug 2020 22:04:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5B78B20781 for ; Sat, 15 Aug 2020 22:04:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ga9Qz/dx" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728549AbgHOWEf (ORCPT ); Sat, 15 Aug 2020 18:04:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728510AbgHOVuz (ORCPT ); Sat, 15 Aug 2020 17:50:55 -0400 Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9C701C0F26D8 for ; Sat, 15 Aug 2020 10:38:03 -0700 (PDT) Received: by mail-wr1-x441.google.com with SMTP id c15so10996637wrs.11 for ; Sat, 15 Aug 2020 10:38:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=kq93Opb3Of8+871dcjR152dIowralAE8w6S6qrlJb3A=; b=ga9Qz/dxK6MbhVZ3aFYnfC7jc0ibRP7SfKRsR0R9e39l+x6+JAcOq11KuTZh3k38dV uwM4HG73IhvpOfQyqyZmjW3mAX40fBX1pux0psTFamm27+VpRj29grdTcHLyzSL6L0hr n2D0dEOBpBj3w9oI1+xwlmlFQEmaiEFcQ1U5BXxNjRQA6YjDv9PC21hV4x4jzj07qkh/ +5hHMDmasNTZNIwszChLBuTpCwjSEVtdQepm/TusMNA1camN/X4NsiTeGBZaWWIwbp+M v2DzB7JUI9F6iRIjGrB4UEwRyyGHe7i6s9FGBCAbM6vD7paJUk//RtlUXvlohQNY8Tzt Q+jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=kq93Opb3Of8+871dcjR152dIowralAE8w6S6qrlJb3A=; b=Q9of8ArZLE4LPfTPIYrIxUsRREMqCy00I0Q8I4Cb+EJmQcOnZ+VtynzLDiPY3j8nD9 PjvCFhGfhRA64wL0QwjqFw9pvGZbKZa0xxQzMehF/yL2ktOIAxjQhybmq5McaNMgpg03 b7m1wqprDie2Rrfs6hkV9iVNE5U49CT8l37nW1Rdfgzvz5cJlbL+OLlaRjXBpFQj9+5a +KUvoJkp5pGVuq237MR6EJYFqTwLYWAdeDvECix7b51Excc2zT21SaGgw8VBuQpIbEk8 JkFkeA6LW3BrLiP9IKXgpv4NItcho28fMLGKYG5W9ZtwNcT4q1sJ4rLMrvyos+ionndK cx1g== X-Gm-Message-State: AOAM532uflaO/UPIEgNijspQ4bCjfYfF09Xx6HeHhC7KmT7XeRaSKfRV 1viysv/zL1RpveRiSRm64mzhVBRb0b4= X-Google-Smtp-Source: ABdhPJxbizw/9qIrZuh5g9B6LB0HAQ6NPamob8VcQPpQOTVKIwsvoKb1EWbv158HZsSxlBi95Kr+bw== X-Received: by 2002:a5d:6047:: with SMTP id j7mr7509554wrt.315.1597513080263; Sat, 15 Aug 2020 10:38:00 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id g145sm30018304wmg.23.2020.08.15.10.37.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Aug 2020 10:37:59 -0700 (PDT) Message-Id: In-Reply-To: References: From: "Elijah Newren via GitGitGadget" Date: Sat, 15 Aug 2020 17:37:55 +0000 Subject: [PATCH v3 1/3] mem-pool: add convenience functions for strdup and strndup Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Matheus Tavares , Eric Sunshine , =?utf-8?b?UmVuw6k=?= Scharfe , Elijah Newren , Elijah Newren Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren fast-import had a special mem_pool_strdup() convenience function that I want to be able to use from the new merge algorithm I am writing. Move it from fast-import to mem-pool, and also add a mem_pool_strndup() while at it that I also want to use. Signed-off-by: Elijah Newren --- fast-import.c | 12 ++---------- mem-pool.c | 18 ++++++++++++++++++ mem-pool.h | 6 ++++++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/fast-import.c b/fast-import.c index ce47794db6..c45fe7474c 100644 --- a/fast-import.c +++ b/fast-import.c @@ -526,14 +526,6 @@ static unsigned int hc_str(const char *s, size_t len) return r; } -static char *pool_strdup(const char *s) -{ - size_t len = strlen(s) + 1; - char *r = mem_pool_alloc(&fi_mem_pool, len); - memcpy(r, s, len); - return r; -} - static void insert_mark(struct mark_set *s, uintmax_t idnum, struct object_entry *oe) { while ((idnum >> s->shift) >= 1024) { @@ -615,7 +607,7 @@ static struct branch *new_branch(const char *name) die("Branch name doesn't conform to GIT standards: %s", name); b = mem_pool_calloc(&fi_mem_pool, 1, sizeof(struct branch)); - b->name = pool_strdup(name); + b->name = mem_pool_strdup(&fi_mem_pool, name); b->table_next_branch = branch_table[hc]; b->branch_tree.versions[0].mode = S_IFDIR; b->branch_tree.versions[1].mode = S_IFDIR; @@ -2806,7 +2798,7 @@ static void parse_new_tag(const char *arg) t = mem_pool_alloc(&fi_mem_pool, sizeof(struct tag)); memset(t, 0, sizeof(struct tag)); - t->name = pool_strdup(arg); + t->name = mem_pool_strdup(&fi_mem_pool, arg); if (last_tag) last_tag->next_tag = t; else diff --git a/mem-pool.c b/mem-pool.c index a2841a4a9a..020b51e0c5 100644 --- a/mem-pool.c +++ b/mem-pool.c @@ -102,6 +102,24 @@ void *mem_pool_calloc(struct mem_pool *mem_pool, size_t count, size_t size) return r; } +char *mem_pool_strdup(struct mem_pool *pool, const char *str) +{ + size_t len = strlen(str) + 1; + char *ret = mem_pool_alloc(pool, len); + + return memcpy(ret, str, len); +} + +char *mem_pool_strndup(struct mem_pool *pool, const char *str, size_t len) +{ + char *p = memchr(str, '\0', len); + size_t actual_len = (p ? p - str : len); + char *ret = mem_pool_alloc(pool, actual_len+1); + + ret[actual_len] = '\0'; + return memcpy(ret, str, actual_len); +} + int mem_pool_contains(struct mem_pool *mem_pool, void *mem) { struct mp_block *p; diff --git a/mem-pool.h b/mem-pool.h index 999d3c3a52..ca062c9070 100644 --- a/mem-pool.h +++ b/mem-pool.h @@ -41,6 +41,12 @@ void *mem_pool_alloc(struct mem_pool *pool, size_t len); */ void *mem_pool_calloc(struct mem_pool *pool, size_t count, size_t size); +/* + * Allocate memory from the memory pool and copy str into it. + */ +char *mem_pool_strdup(struct mem_pool *pool, const char *str); +char *mem_pool_strndup(struct mem_pool *pool, const char *str, size_t len); + /* * Move the memory associated with the 'src' pool to the 'dst' pool. The 'src' * pool will be empty and not contain any memory. It still needs to be free'd From patchwork Sat Aug 15 17:37:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jean-No=C3=ABl_Avila_via_GitGitGadget?= X-Patchwork-Id: 11715787 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 74BAE618 for ; Sat, 15 Aug 2020 22:02:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 57F5420639 for ; Sat, 15 Aug 2020 22:02:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="R16nPcD4" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729741AbgHOWC3 (ORCPT ); Sat, 15 Aug 2020 18:02:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45648 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728735AbgHOVvY (ORCPT ); Sat, 15 Aug 2020 17:51:24 -0400 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 03A4FC0F26D7 for ; Sat, 15 Aug 2020 10:38:03 -0700 (PDT) Received: by mail-wr1-x42f.google.com with SMTP id a15so11007374wrh.10 for ; Sat, 15 Aug 2020 10:38:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=HihR3MXTCuXZyJFhlu8zx4dmvSHubtDxD8SCsfS341s=; b=R16nPcD4S9O5hVpKab4udUFuxAn43Ve4OQ4KcbW/i01kJNIbK0YUlg6pPulQE57U7M G/s7gMT4XqRLIQBlg0+Urz7WiZHmjTGIe8eamGNwIY2B4+IVKXymnFoi2GTKQHz8P517 VqrdLycp/LQfgQ/TIHKmej6I2leXtCOuUbbdYDf2bF5PlGWCwdU0zD9789IbBTIGqH+K 0Uj7KHFk/0QyELL5hCdarJ8w368LEkblr+xof8OxwzphhQ3mmK7g5ob3MYSZ5v8Bb75L aPKNu3igkvgiAnFIi6OxZzdGdoCp3xdExx3aQUh2NXHtR2axjnD5/mh0+/quT/UfF6Tp 35Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=HihR3MXTCuXZyJFhlu8zx4dmvSHubtDxD8SCsfS341s=; b=q0mZzPsFegdFAtiV4BCzWPgQqTUWUt7YVG1xKUc4BSAG3XkJCezDxPlA1n05V13ojv 8Xpm0WImMp7ELnuZQUJJu/LNmgTbzn1v+O024z4ugqWNv4g5bjVwUaKkj2rf4h+rd34C V4yBNEAc8b0jyAxAfq24Y1NogW5eeukrfQGg/P3Kmf/pRJnr+4XMx+PJmUHZABgS7Ue2 U/dOYf0CPdy4IG56t+vGFDWLtG9RxjbaDbaFR9FtqYCXR+qRKPxJ2XFyw7G4GzSuxZR3 o13BnQX5+64chdhAjoNzbWgLEYVbzwJoeeoPV/u4VN+BUVPV3dkblPKkTF2QWmUMHv0J MJQA== X-Gm-Message-State: AOAM531CQKVNaG5/83usrNyDkrG5gUMuCY32rSaJxWLNHOcrtLYyz3On dHpVzrkCnVCkvIPkxXX67Wa9pogwB7c= X-Google-Smtp-Source: ABdhPJw4oSJea+qK25TqesZl3p1gBmfl/c3d0b0I62v5m6IY6k5gajCWDmCuQScFXrLJlZkh34b1ow== X-Received: by 2002:a5d:548f:: with SMTP id h15mr7683445wrv.331.1597513081334; Sat, 15 Aug 2020 10:38:01 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id k1sm24105810wrw.91.2020.08.15.10.38.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Aug 2020 10:38:00 -0700 (PDT) Message-Id: <65f334f5cfe7dd99e74d48f2b16b61ae84182c9d.1597513078.git.gitgitgadget@gmail.com> In-Reply-To: References: From: "Elijah Newren via GitGitGadget" Date: Sat, 15 Aug 2020 17:37:56 +0000 Subject: [PATCH v3 2/3] mem-pool: use more standard initialization and finalization Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Matheus Tavares , Eric Sunshine , =?utf-8?b?UmVuw6k=?= Scharfe , Elijah Newren , Elijah Newren Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren A typical memory type, such as strbuf, hashmap, or string_list can be stored on the stack or embedded within another structure. mem_pool cannot be, because of how mem_pool_init() and mem_pool_discard() are written. mem_pool_init() does essentially the following (simplified for purposes of explanation here): void mem_pool_init(struct mem_pool **pool...) { *pool = xcalloc(1, sizeof(*pool)); It seems weird to require that mem_pools can only be accessed through a pointer. It also seems slightly dangerous: unlike strbuf_release() or strbuf_reset() or string_list_clear(), all of which put the data structure into a state where it can be re-used after the call, mem_pool_discard(pool) will leave pool pointing at free'd memory. read-cache (and split-index) are the only current users of mem_pools, and they haven't fallen into a use-after-free mistake here, but it seems likely to be problematic for future users especially since several of the current callers of mem_pool_init() will only call it when the mem_pool* is not already allocated (i.e. is NULL). This type of mechanism also prevents finding synchronization points where one can free existing memory and then resume more operations. It would be natural at such points to run something like mem_pool_discard(pool...); and, if necessary, mem_pool_init(&pool...); and then carry on continuing to use the pool. However, this fails badly if several objects had a copy of the value of pool from before these commands; in such a case, those objects won't get the updated value of pool that mem_pool_init() overwrites pool with and they'll all instead be reading and writing from free'd memory. Modify mem_pool_init()/mem_pool_discard() to behave more like strbuf_init()/strbuf_release() or string_list_init()/string_list_clear() In particular: (1) make mem_pool_init() just take a mem_pool* and have it only worry about allocating struct mp_blocks, not the struct mem_pool itself, (2) make mem_pool_discard() free the memory that the pool was responsible for, but leave it in a state where it can be used to allocate more memory afterward (without the need to call mem_pool_init() again). Signed-off-by: Elijah Newren --- mem-pool.c | 15 ++++----------- mem-pool.h | 4 ++-- read-cache.c | 21 +++++++++++++-------- split-index.c | 6 ++++-- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/mem-pool.c b/mem-pool.c index 020b51e0c5..7659919ab2 100644 --- a/mem-pool.c +++ b/mem-pool.c @@ -33,21 +33,13 @@ static struct mp_block *mem_pool_alloc_block(struct mem_pool *mem_pool, size_t b return p; } -void mem_pool_init(struct mem_pool **mem_pool, size_t initial_size) +void mem_pool_init(struct mem_pool *pool, size_t initial_size) { - struct mem_pool *pool; - - if (*mem_pool) - return; - - pool = xcalloc(1, sizeof(*pool)); - + memset(pool, 0, sizeof(*pool)); pool->block_alloc = BLOCK_GROWTH_SIZE; if (initial_size > 0) mem_pool_alloc_block(pool, initial_size, NULL); - - *mem_pool = pool; } void mem_pool_discard(struct mem_pool *mem_pool, int invalidate_memory) @@ -66,7 +58,8 @@ void mem_pool_discard(struct mem_pool *mem_pool, int invalidate_memory) free(block_to_free); } - free(mem_pool); + mem_pool->mp_block = NULL; + mem_pool->pool_alloc = 0; } void *mem_pool_alloc(struct mem_pool *mem_pool, size_t len) diff --git a/mem-pool.h b/mem-pool.h index ca062c9070..870161ab44 100644 --- a/mem-pool.h +++ b/mem-pool.h @@ -24,10 +24,10 @@ struct mem_pool { /* * Initialize mem_pool with specified initial size. */ -void mem_pool_init(struct mem_pool **mem_pool, size_t initial_size); +void mem_pool_init(struct mem_pool *pool, size_t initial_size); /* - * Discard a memory pool and free all the memory it is responsible for. + * Discard all the memory the memory pool is responsible for. */ void mem_pool_discard(struct mem_pool *mem_pool, int invalidate_memory); diff --git a/read-cache.c b/read-cache.c index 8ed1c29b54..fa291cdbee 100644 --- a/read-cache.c +++ b/read-cache.c @@ -89,8 +89,10 @@ static struct mem_pool *find_mem_pool(struct index_state *istate) else pool_ptr = &istate->ce_mem_pool; - if (!*pool_ptr) - mem_pool_init(pool_ptr, 0); + if (!*pool_ptr) { + *pool_ptr = xmalloc(sizeof(**pool_ptr)); + mem_pool_init(*pool_ptr, 0); + } return *pool_ptr; } @@ -2006,11 +2008,12 @@ static unsigned long load_all_cache_entries(struct index_state *istate, { unsigned long consumed; + istate->ce_mem_pool = xmalloc(sizeof(*istate->ce_mem_pool)); if (istate->version == 4) { - mem_pool_init(&istate->ce_mem_pool, + mem_pool_init(istate->ce_mem_pool, estimate_cache_size_from_compressed(istate->cache_nr)); } else { - mem_pool_init(&istate->ce_mem_pool, + mem_pool_init(istate->ce_mem_pool, estimate_cache_size(mmap_size, istate->cache_nr)); } @@ -2070,7 +2073,8 @@ static unsigned long load_cache_entries_threaded(struct index_state *istate, con if (istate->name_hash_initialized) BUG("the name hash isn't thread safe"); - mem_pool_init(&istate->ce_mem_pool, 0); + istate->ce_mem_pool = xmalloc(sizeof(*istate->ce_mem_pool)); + mem_pool_init(istate->ce_mem_pool, 0); /* ensure we have no more threads than we have blocks to process */ if (nr_threads > ieot->nr) @@ -2097,11 +2101,12 @@ static unsigned long load_cache_entries_threaded(struct index_state *istate, con nr = 0; for (j = p->ieot_start; j < p->ieot_start + p->ieot_blocks; j++) nr += p->ieot->entries[j].nr; + istate->ce_mem_pool = xmalloc(sizeof(*istate->ce_mem_pool)); if (istate->version == 4) { - mem_pool_init(&p->ce_mem_pool, + mem_pool_init(p->ce_mem_pool, estimate_cache_size_from_compressed(nr)); } else { - mem_pool_init(&p->ce_mem_pool, + mem_pool_init(p->ce_mem_pool, estimate_cache_size(mmap_size, nr)); } @@ -2358,7 +2363,7 @@ int discard_index(struct index_state *istate) if (istate->ce_mem_pool) { mem_pool_discard(istate->ce_mem_pool, should_validate_cache_entries()); - istate->ce_mem_pool = NULL; + FREE_AND_NULL(istate->ce_mem_pool); } return 0; diff --git a/split-index.c b/split-index.c index e6154e4ea9..c0e8ad670d 100644 --- a/split-index.c +++ b/split-index.c @@ -79,8 +79,10 @@ void move_cache_to_base_index(struct index_state *istate) if (si->base && si->base->ce_mem_pool) { - if (!istate->ce_mem_pool) - mem_pool_init(&istate->ce_mem_pool, 0); + if (!istate->ce_mem_pool) { + istate->ce_mem_pool = xmalloc(sizeof(struct mem_pool)); + mem_pool_init(istate->ce_mem_pool, 0); + } mem_pool_combine(istate->ce_mem_pool, istate->split_index->base->ce_mem_pool); } From patchwork Sat Aug 15 17:37:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jean-No=C3=ABl_Avila_via_GitGitGadget?= X-Patchwork-Id: 11715755 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 60810109B for ; Sat, 15 Aug 2020 22:00:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4197C206B6 for ; Sat, 15 Aug 2020 22:00:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ltfB0ZX/" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728857AbgHOWAG (ORCPT ); Sat, 15 Aug 2020 18:00:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728868AbgHOVvi (ORCPT ); Sat, 15 Aug 2020 17:51:38 -0400 Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DCDA9C0F26D9 for ; Sat, 15 Aug 2020 10:38:03 -0700 (PDT) Received: by mail-wr1-x443.google.com with SMTP id z18so11003958wrm.12 for ; Sat, 15 Aug 2020 10:38:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=2aZV65QQmMM8E78ShlHxCGl6GN39gcUCmrk87+Nqs+E=; b=ltfB0ZX/aOc/ZCzDvBlT5WQvifNitiFJyrSzsorblE+w3n3naYOsS1cRvyeqFo8bRG SNcWfI1Yv5icrg+V3upYJlJcHvTFb5sL5T+2ATJboeoA+UePdT1w4eugv1lh3ZR6GX6Y brSTVWVdqv9Gv2GxaeH2LKxlSTUZJ+NQUnYAU49CK7h8zk5Sl186dRwH9fiAkmp85VL7 istZA5CQ3/vpiP3ivyRCwZNQw505maWce3wYm6Se4Uizp/WEj43QTkZfv/QfwPl+dYoc DssnYB65o75AfjibNorfRAxEHtOGvnF/Ojv5mCF8TM9u1OyL5U7nMz29uhTzzrfAH+LQ jfOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=2aZV65QQmMM8E78ShlHxCGl6GN39gcUCmrk87+Nqs+E=; b=kJQE8NLP4c4KzhwrB5XagpDXZnsfjEgEe16+SFC+5E4iSngRBsbd7+qoibsfns7z3X ByUFzf58llctX8V82FR4SEHj9mi27nQdpTIX6pM1Jz84PL9gOHjhaJuctZfq4IqDLQlB 5FT5YeXrbJR8Zy+tNDEKvmtG+ciYaTv02UHvzVn1rxp+at6lxfGw9D7qK6MQsR8oK6en 9gu+ycO7CSlp/12dqRcWhG4iYY/eUC9jIu/IgRpiIqdGd3V203oeIaEmMf72uTsEdV6B /skYTgMi4PZSoydsUO332hcW07phHpIKLJfe19qv4msyDq+IjVRc7Yrxj8avL5Ikz9Ut JXQQ== X-Gm-Message-State: AOAM533cDCxek1HCF1KGZw6aUV2p/fdhIaPA/spzOASqyLnl9nzUb2ox 0WZFvW0CFZQtu9YJqEeMG9UTZKiskqc= X-Google-Smtp-Source: ABdhPJzfYibu9Sm1aQkEDBR8eey3DU6AJ7uZaqqdCCHCgXg+eIxAqhCQL3ADCq/YTiuSpnZ7HsdP+A== X-Received: by 2002:a5d:61c8:: with SMTP id q8mr7462535wrv.160.1597513082430; Sat, 15 Aug 2020 10:38:02 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id g16sm20463734wrs.88.2020.08.15.10.38.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Aug 2020 10:38:01 -0700 (PDT) Message-Id: <09976779c3b4dc47e44bb70034119548b9f51391.1597513078.git.gitgitgadget@gmail.com> In-Reply-To: References: From: "Elijah Newren via GitGitGadget" Date: Sat, 15 Aug 2020 17:37:57 +0000 Subject: [PATCH v3 3/3] mem-pool: use consistent pool variable name Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Matheus Tavares , Eric Sunshine , =?utf-8?b?UmVuw6k=?= Scharfe , Elijah Newren , Elijah Newren Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren About half the function declarations in mem-pool.h used 'struct mem_pool *pool', while the other half used 'struct mem_pool *mem_pool'. Make the code a bit more consistent by just using 'pool' in preference to 'mem_pool' everywhere. No behavioral changes included; this is just a mechanical rename (though a line or two was rewrapped as well). Signed-off-by: Elijah Newren --- mem-pool.c | 40 +++++++++++++++++++++------------------- mem-pool.h | 4 ++-- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/mem-pool.c b/mem-pool.c index 7659919ab2..8401761dda 100644 --- a/mem-pool.c +++ b/mem-pool.c @@ -12,11 +12,13 @@ * `insert_after`. If `insert_after` is NULL, then insert block at the * head of the linked list. */ -static struct mp_block *mem_pool_alloc_block(struct mem_pool *mem_pool, size_t block_alloc, struct mp_block *insert_after) +static struct mp_block *mem_pool_alloc_block(struct mem_pool *pool, + size_t block_alloc, + struct mp_block *insert_after) { struct mp_block *p; - mem_pool->pool_alloc += sizeof(struct mp_block) + block_alloc; + pool->pool_alloc += sizeof(struct mp_block) + block_alloc; p = xmalloc(st_add(sizeof(struct mp_block), block_alloc)); p->next_free = (char *)p->space; @@ -26,8 +28,8 @@ static struct mp_block *mem_pool_alloc_block(struct mem_pool *mem_pool, size_t b p->next_block = insert_after->next_block; insert_after->next_block = p; } else { - p->next_block = mem_pool->mp_block; - mem_pool->mp_block = p; + p->next_block = pool->mp_block; + pool->mp_block = p; } return p; @@ -42,11 +44,11 @@ void mem_pool_init(struct mem_pool *pool, size_t initial_size) mem_pool_alloc_block(pool, initial_size, NULL); } -void mem_pool_discard(struct mem_pool *mem_pool, int invalidate_memory) +void mem_pool_discard(struct mem_pool *pool, int invalidate_memory) { struct mp_block *block, *block_to_free; - block = mem_pool->mp_block; + block = pool->mp_block; while (block) { block_to_free = block; @@ -58,11 +60,11 @@ void mem_pool_discard(struct mem_pool *mem_pool, int invalidate_memory) free(block_to_free); } - mem_pool->mp_block = NULL; - mem_pool->pool_alloc = 0; + pool->mp_block = NULL; + pool->pool_alloc = 0; } -void *mem_pool_alloc(struct mem_pool *mem_pool, size_t len) +void *mem_pool_alloc(struct mem_pool *pool, size_t len) { struct mp_block *p = NULL; void *r; @@ -71,15 +73,15 @@ void *mem_pool_alloc(struct mem_pool *mem_pool, size_t len) if (len & (sizeof(uintmax_t) - 1)) len += sizeof(uintmax_t) - (len & (sizeof(uintmax_t) - 1)); - if (mem_pool->mp_block && - mem_pool->mp_block->end - mem_pool->mp_block->next_free >= len) - p = mem_pool->mp_block; + if (pool->mp_block && + pool->mp_block->end - pool->mp_block->next_free >= len) + p = pool->mp_block; if (!p) { - if (len >= (mem_pool->block_alloc / 2)) - return mem_pool_alloc_block(mem_pool, len, mem_pool->mp_block); + if (len >= (pool->block_alloc / 2)) + return mem_pool_alloc_block(pool, len, pool->mp_block); - p = mem_pool_alloc_block(mem_pool, mem_pool->block_alloc, NULL); + p = mem_pool_alloc_block(pool, pool->block_alloc, NULL); } r = p->next_free; @@ -87,10 +89,10 @@ void *mem_pool_alloc(struct mem_pool *mem_pool, size_t len) return r; } -void *mem_pool_calloc(struct mem_pool *mem_pool, size_t count, size_t size) +void *mem_pool_calloc(struct mem_pool *pool, size_t count, size_t size) { size_t len = st_mult(count, size); - void *r = mem_pool_alloc(mem_pool, len); + void *r = mem_pool_alloc(pool, len); memset(r, 0, len); return r; } @@ -113,12 +115,12 @@ char *mem_pool_strndup(struct mem_pool *pool, const char *str, size_t len) return memcpy(ret, str, actual_len); } -int mem_pool_contains(struct mem_pool *mem_pool, void *mem) +int mem_pool_contains(struct mem_pool *pool, void *mem) { struct mp_block *p; /* Check if memory is allocated in a block */ - for (p = mem_pool->mp_block; p; p = p->next_block) + for (p = pool->mp_block; p; p = p->next_block) if ((mem >= ((void *)p->space)) && (mem < ((void *)p->end))) return 1; diff --git a/mem-pool.h b/mem-pool.h index 870161ab44..fe7507f022 100644 --- a/mem-pool.h +++ b/mem-pool.h @@ -29,7 +29,7 @@ void mem_pool_init(struct mem_pool *pool, size_t initial_size); /* * Discard all the memory the memory pool is responsible for. */ -void mem_pool_discard(struct mem_pool *mem_pool, int invalidate_memory); +void mem_pool_discard(struct mem_pool *pool, int invalidate_memory); /* * Alloc memory from the mem_pool. @@ -58,6 +58,6 @@ void mem_pool_combine(struct mem_pool *dst, struct mem_pool *src); * Check if a memory pointed at by 'mem' is part of the range of * memory managed by the specified mem_pool. */ -int mem_pool_contains(struct mem_pool *mem_pool, void *mem); +int mem_pool_contains(struct mem_pool *pool, void *mem); #endif