git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2] read-cache: free threaded memory pool

From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Date
Oct 1, 2024, 17:37 UTC
Message-ID
<pull.1801.v2.git.1727804265033.gitgitgadget@gmail.com>
In-Reply-To
<pull.1801.git.1727696424.gitgitgadget@gmail.com>
From: Derrick Stolee <stolee@gmail.com>

In load_cache_entries_threaded(), each thread allocates its own memory pool. This pool needs to be cleaned up while closing the threads down, or it will be leaked.

This ce_mem_pool pointer could theoretically be converted to an inline copy of the struct, but the use of a pointer helps with existing lazy- initialization logic. Adjusting that behavior only to avoid this pointer would be a much bigger change.

Signed-off-by: Derrick Stolee <stolee@gmail.com>
---
    read-cache: two small leak fixes
    
    This v2 removes the duplicate patch and updates the commit message.
    
    Thanks, -Stolee
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1801%2Fderrickstolee%2Fleaks-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1801/derrickstolee/leaks-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1801
Range-diff vs v1:
 1:  9a45b15ea4b ! 1:  220a098c93c read-cache: free threaded memory pool
     @@ Metadata
       ## Commit message ##
          read-cache: free threaded memory pool
      
     -    In load_cache_entries_threaded(), each thread is allocated its own
     -    memory pool. This pool needs to be cleaned up while closing the threads
     -    down, or it will be leaked.
     +    In load_cache_entries_threaded(), each thread allocates its own memory
     +    pool. This pool needs to be cleaned up while closing the threads down,
     +    or it will be leaked.
     +
     +    This ce_mem_pool pointer could theoretically be converted to an inline
     +    copy of the struct, but the use of a pointer helps with existing lazy-
     +    initialization logic. Adjusting that behavior only to avoid this pointer
     +    would be a much bigger change.
      
          Signed-off-by: Derrick Stolee <stolee@gmail.com>
      
 2:  b6fe5b3ef7e < -:  ----------- read-cache: free hash context in do_write_index()
 read-cache.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/read-cache.c b/read-cache.c
index 764fdfec465..3c078afadbc 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -2188,6 +2188,7 @@ static unsigned long load_cache_entries_threaded(struct index_state *istate, con
 		if (err)
 			die(_("unable to join load_cache_entries thread: %s"), strerror(err));
 		mem_pool_combine(istate->ce_mem_pool, p->ce_mem_pool);
+		free(p->ce_mem_pool);
 		consumed += p->consumed;
 	}
 

base-commit: 6258f68c3c1092c901337895c864073dcdea9213
-- 
gitgitgadget
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 10 of 11 in “read-cache: two small leak fixes”
  1. 0/2 read-cache: two small leak fixesDerrick Stolee via GitGitGadget, Sep 30, 2024
  2. 1/2 read-cache: free threaded memory poolDerrick Stolee via GitGitGadget, Sep 30, 2024
  3. Patrick SteinhardtSep 30, 2024
  4. Derrick StoleeOct 1, 2024
  5. Patrick SteinhardtOct 1, 2024
  6. 2/2 read-cache: free hash context in do_write_index()Derrick Stolee via GitGitGadget, Sep 30, 2024
  7. Patrick SteinhardtSep 30, 2024
  8. Derrick StoleeOct 1, 2024
  9. Patrick SteinhardtOct 1, 2024
  10. read-cache: free threaded memory poolDerrick Stolee via GitGitGadget, Oct 1, 2024
  11. Patrick SteinhardtOct 2, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.