aboutsummaryrefslogtreecommitdiffstats
path: root/commit.c
diff options
context:
space:
mode:
authorStefan Beller <sbeller@google.com>2018-05-15 14:48:42 -0700
committerJunio C Hamano <gitster@pobox.com>2018-05-16 11:16:50 +0900
commit14ba97f81c7b94e10d591b363688a073023f332d (patch)
treeed3672cff9cc1e0df22baa6c689db4deb06805f3 /commit.c
parent341e45e46bba094ef1274957ef5891f43e91b344 (diff)
downloadgit-14ba97f81c7b94e10d591b363688a073023f332d.tar.gz
alloc: allow arbitrary repositories for alloc functions
We have to convert all of the alloc functions at once, because alloc_report uses a funky macro for reporting. It is better for the sake of mechanical conversion to convert multiple functions at once rather than changing the structure of the reporting function. We record all memory allocation in alloc.c, and free them in clear_alloc_state, which is called for all repositories except the_repository. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit.c')
-rw-r--r--commit.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/commit.c b/commit.c
index a9a43e79ba..5eb4d2f08f 100644
--- a/commit.c
+++ b/commit.c
@@ -6,6 +6,7 @@
#include "diff.h"
#include "revision.h"
#include "notes.h"
+#include "alloc.h"
#include "gpg-interface.h"
#include "mergesort.h"
#include "commit-slab.h"
@@ -296,6 +297,17 @@ void free_commit_buffer(struct commit *commit)
}
}
+void release_commit_memory(struct commit *c)
+{
+ c->tree = NULL;
+ c->index = 0;
+ free_commit_buffer(c);
+ free_commit_list(c->parents);
+ /* TODO: what about commit->util? */
+
+ c->object.parsed = 0;
+}
+
const void *detach_commit_buffer(struct commit *commit, unsigned long *sizep)
{
struct commit_buffer *v = buffer_slab_peek(&buffer_slab, commit);