diff options
author | Simon McVittie <smcv@collabora.com> | 2021-01-29 19:11:11 +0000 |
---|---|---|
committer | Simon McVittie <smcv@collabora.com> | 2021-02-01 10:44:35 +0000 |
commit | 023793071b9fef6c23502fe7b558e9226f85b8db (patch) | |
tree | bbfc2b61b3484c665df02228cfcda0fcba6dfb3e | |
parent | 9fef98cf84216b33b6a2a488b544cd4056232ac1 (diff) | |
download | glib-023793071b9fef6c23502fe7b558e9226f85b8db.tar.gz |
glib-private: Add wrappers for telling AddressSanitizer to ignore leaks
Signed-off-by: Simon McVittie <smcv@collabora.com>
-rw-r--r-- | glib/glib-private.h | 43 |
1 files changed, 43 insertions, 0 deletions
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 <sanitizer/lsan_interface.h> + +#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); |