Skip to content

Commit 721df29

Browse files
pks-tgitster
authored andcommitted
git-compat-util: drop UNLEAK() annotation
There are two users of `UNLEAK()` left in our codebase: - In "builtin/clone.c", annotating the `repo` variable. That leak has already been fixed though as you can see in the context, where we do know to free `repo_to_free`. - In "builtin/diff.c", to unleak entries of the `blob[]` array. That leak has also been fixed, because the entries we assign to that array come from `rev.pending.objects`, and we do eventually release `rev`. This neatly demonstrates one of the issues with `UNLEAK()`: it is quite easy for the annotation to become stale. A second issue is that its whole intent is to paper over leaks. And while that has been a necessary evil in the past, because Git was leaking left and right, it isn't really much of an issue nowadays where our test suite has no known leaks anymore. Remove the last two users and drop the now-unused `UNLEAK()` annotation. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 21ee734 commit 721df29

File tree

4 files changed

+0
-37
lines changed

4 files changed

+0
-37
lines changed

builtin/clone.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1586,7 +1586,6 @@ int cmd_clone(int argc,
15861586
free(dir);
15871587
free(path);
15881588
free(repo_to_free);
1589-
UNLEAK(repo);
15901589
junk_mode = JUNK_LEAVE_ALL;
15911590

15921591
transport_ls_refs_options_release(&transport_ls_refs_options);

builtin/diff.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,5 @@ int cmd_diff(int argc,
628628
release_revisions(&rev);
629629
object_array_clear(&ent);
630630
symdiff_release(&sdiff);
631-
UNLEAK(blob);
632631
return result;
633632
}

git-compat-util.h

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,26 +1527,6 @@ int cmd_main(int, const char **);
15271527
int common_exit(const char *file, int line, int code);
15281528
#define exit(code) exit(common_exit(__FILE__, __LINE__, (code)))
15291529

1530-
/*
1531-
* You can mark a stack variable with UNLEAK(var) to avoid it being
1532-
* reported as a leak by tools like LSAN or valgrind. The argument
1533-
* should generally be the variable itself (not its address and not what
1534-
* it points to). It's safe to use this on pointers which may already
1535-
* have been freed, or on pointers which may still be in use.
1536-
*
1537-
* Use this _only_ for a variable that leaks by going out of scope at
1538-
* program exit (so only from cmd_* functions or their direct helpers).
1539-
* Normal functions, especially those which may be called multiple
1540-
* times, should actually free their memory. This is only meant as
1541-
* an annotation, and does nothing in non-leak-checking builds.
1542-
*/
1543-
#ifdef SUPPRESS_ANNOTATED_LEAKS
1544-
void unleak_memory(const void *ptr, size_t len);
1545-
#define UNLEAK(var) unleak_memory(&(var), sizeof(var))
1546-
#else
1547-
#define UNLEAK(var) do {} while (0)
1548-
#endif
1549-
15501530
#define z_const
15511531
#include <zlib.h>
15521532

usage.c

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -350,18 +350,3 @@ void bug_fl(const char *file, int line, const char *fmt, ...)
350350
trace2_cmd_error_va(fmt, ap);
351351
va_end(ap);
352352
}
353-
354-
#ifdef SUPPRESS_ANNOTATED_LEAKS
355-
void unleak_memory(const void *ptr, size_t len)
356-
{
357-
static struct suppressed_leak_root {
358-
struct suppressed_leak_root *next;
359-
char data[FLEX_ARRAY];
360-
} *suppressed_leaks;
361-
struct suppressed_leak_root *root;
362-
363-
FLEX_ALLOC_MEM(root, data, ptr, len);
364-
root->next = suppressed_leaks;
365-
suppressed_leaks = root;
366-
}
367-
#endif

0 commit comments

Comments
 (0)