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

[PATCH 1/7] init: plug tiny one-time memory leak

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Oct 2, 2010, 08:31 UTC
Message-ID
<20101002083122.GB29638@burratino>
In-Reply-To
<20101002082752.GA29638@burratino>

The buffer used to construct paths like ".git/objects/info" and ".git/objects/pack" is allocated on the heap and never freed.

So free it. While at it, factor out the relevant code into its own function to make it more obvious that this data is not used elsewhere.

Noticed by valgrind while setting up tests (in test-lib).
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 builtin/init-db.c |   32 +++++++++++++++++++-------------
 1 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/builtin/init-db.c b/builtin/init-db.c
index 0271285..a9c54ea 100644
--- a/builtin/init-db.c
+++ b/builtin/init-db.c
@@ -294,11 +294,26 @@ static int create_default_files(const char *template_path)
 	return reinit;
 }
 
+static void create_sha1_dir(void)
+{
+	const char *sha1_dir = get_object_directory();
+	int len = strlen(sha1_dir);
+	char *path = xmalloc(len + 40);
+
+	memcpy(path, sha1_dir, len);
+
+	safe_create_dir(sha1_dir, 1);
+	strcpy(path+len, "/pack");
+	safe_create_dir(path, 1);
+	strcpy(path+len, "/info");
+	safe_create_dir(path, 1);
+
+	free(path);
+}
+
 int init_db(const char *template_dir, unsigned int flags)
 {
-	const char *sha1_dir;
-	char *path;
-	int len, reinit;
+	int reinit;
 
 	safe_create_dir(get_git_dir(), 0);
 
@@ -313,16 +328,7 @@ int init_db(const char *template_dir, unsigned int flags)
 
 	reinit = create_default_files(template_dir);
 
-	sha1_dir = get_object_directory();
-	len = strlen(sha1_dir);
-	path = xmalloc(len + 40);
-	memcpy(path, sha1_dir, len);
-
-	safe_create_dir(sha1_dir, 1);
-	strcpy(path+len, "/pack");
-	safe_create_dir(path, 1);
-	strcpy(path+len, "/info");
-	safe_create_dir(path, 1);
+	create_sha1_dir();
 
 	if (shared_repository) {
 		char buf[10];
-- 
1.7.2.3
Previous: Jonathan NiederNext: Junio C Hamano
Message 10 of 33 in “memory leak reported by valgrind”
  1. memory leak reported by valgrindIvan Kanis, Aug 9, 2010
  2. Junio C HamanoAug 9, 2010
  3. Erik Faye-LundAug 9, 2010
  4. Alex RiesenAug 9, 2010
  5. Jonathan NiederAug 10, 2010
  6. 1/3 core: Stop leaking ondisk_cache_entrysJonathan Nieder, Aug 10, 2010
  7. 2/3 write-tree: Avoid leak when index refers to an invalid objectJonathan Nieder, Aug 10, 2010
  8. 3/3 read-tree: stop leaking tree objectsJonathan Nieder, Aug 10, 2010
  9. 0/7 Re: [PATCH] memory leak reported by valgrindJonathan Nieder, Oct 2, 2010
  10. 1/7 init: plug tiny one-time memory leakJonathan Nieder, Oct 2, 2010
  11. Junio C HamanoOct 3, 2010
  12. init: plug tiny one-time memory leakJonathan Nieder, Oct 4, 2010
  13. 2/7 lockfile: introduce alloc_lock_file() to avoid valgrind noiseJonathan Nieder, Oct 2, 2010
  14. Andreas EricssonOct 2, 2010
  15. Jonathan NiederOct 2, 2010
  16. Junio C HamanoOct 6, 2010
  17. Jonathan NiederOct 6, 2010
  18. Junio C HamanoOct 6, 2010
  19. Jonathan NiederOct 6, 2010
  20. 3/7 environment.c: remove unused variableJonathan Nieder, Oct 2, 2010
  21. 4/7 setup: make sure git dir path is in a permanent bufferJonathan Nieder, Oct 2, 2010
  22. Nguyen Thai Ngoc DuyOct 4, 2010
  23. 5/7 Introduce malloc/strdup/pathdup variants for permanent allocationsJonathan Nieder, Oct 2, 2010
  24. 6/7 environment: use alloc_permanent() for computed git_dir and coJonathan Nieder, Oct 2, 2010
  25. 7/7 commit-tree: free commit message before exitingJonathan Nieder, Oct 2, 2010
  26. Sverre RabbelierOct 2, 2010
  27. Jonathan NiederOct 2, 2010
  28. Sverre RabbelierOct 2, 2010
  29. Jonathan NiederOct 2, 2010
  30. Junio C HamanoOct 4, 2010
  31. Jonathan NiederOct 4, 2010
  32. Junio C HamanoOct 4, 2010
  33. Jonathan NiederOct 4, 2010

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.