From 6c7d9e0389ca459ae530f8c0bdac48411827fdba Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 29 Jan 2021 19:11:11 +0000 Subject: glib-private: Add wrappers for telling AddressSanitizer to ignore leaks Signed-off-by: Simon McVittie --- glib/glib-private.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/glib/glib-private.h b/glib/glib-private.h index c2e7fd401..8de380d12 100644 --- a/glib/glib-private.h +++ b/glib/glib-private.h @@ -33,7 +33,50 @@ */ #define _GLIB_ADDRESS_SANITIZER +#include + +#endif + +/* + * g_ignore_leak: + * @p: any pointer + * + * Tell AddressSanitizer and similar tools that if the object pointed to + * by @p is leaked, it is not a problem. Use this to suppress memory leak + * reports when a potentially unreachable pointer is deliberately not + * going to be deallocated. + */ +static inline void +g_ignore_leak (gconstpointer p) +{ +#ifdef _GLIB_ADDRESS_SANITIZER + if (p != NULL) + __lsan_ignore_object (p); +#endif +} + +/* + * g_ignore_strv_leak: + * @strv: (nullable) (array zero-terminated=1): an array of strings + * + * The same as g_ignore_leak(), but for the memory pointed to by @strv, + * and for each element of @strv. + */ +static inline void +g_ignore_strv_leak (GStrv strv) +{ +#ifdef _GLIB_ADDRESS_SANITIZER + gchar **item; + + if (strv) + { + g_ignore_leak (strv); + + for (item = strv; *item != NULL; item++) + g_ignore_leak (*item); + } #endif +} GMainContext * g_get_worker_context (void); gboolean g_check_setuid (void); -- cgit v1.2.1