glib/gobject
Michael Catanzaro a412ffe4d3 gatomicarray: suppress valgrind memory leak warnings
The problem occurs because we keep a pointer inside the allocated block,
instead of a pointer to the start of the block:

```
==180238== 16 bytes in 1 blocks are possibly lost in loss record 3,086 of 16,075
==180238==    at 0x483980B: malloc (vg_replace_malloc.c:309)
==180238==    by 0x548942C: g_malloc (gmem.c:102)
==180238==    by 0x54A4748: g_slice_alloc (gslice.c:1025)
==180238==    by 0x53D0AAF: freelist_alloc (gatomicarray.c:77)
==180238==    by 0x53D0B85: _g_atomic_array_copy (gatomicarray.c:133)
==180238==    by 0x53F8E6D: iface_node_set_offset_L (gtype.c:1347)
==180238==    by 0x53F91F1: type_node_add_iface_entry_W (gtype.c:1444)
==180238==    by 0x53F93DF: type_add_interface_Wm (gtype.c:1477)
==180238==    by 0x53FC946: g_type_add_interface_static (gtype.c:2852)
==180238==    by 0x4A3D53A: gtk_menu_shell_accessible_get_type_once (gtkmenushellaccessible.c:26)
==180238==    by 0x4A3D495: gtk_menu_shell_accessible_get_type (gtkmenushellaccessible.c:26)
==180238==    by 0x4C8AC44: gtk_menu_shell_class_init (gtkmenushell.c:424)
```

Note we cannot use VALGRIND_FREELIKE_BLOCK() in freelist_free() because we
have not actually freed the FreeListNode and need to dereference it in
freelist_alloc() to decide whether to reuse the block. That would result
in a use-after-free warning before we would get a chance to call
VALGRIND_MALLOCLIKE_BLOCK() in the reuse path.

Also note that this free list only ever grows: it never shrinks for the
lifetime of the application, so nothing here will ever be truely freed,
although unused elements are eligible for reuse.

Fix suggested by Philip Withnall

Related: #2076
2020-11-24 08:10:58 -06:00
..
tests Merge branch 'py-fixes' into 'master' 2020-11-20 18:10:40 +00:00
gatomicarray.c gatomicarray: suppress valgrind memory leak warnings 2020-11-24 08:10:58 -06:00
gatomicarray.h gatomicarray: Drop volatile qualifier from GAtomicArray API 2020-11-20 14:40:19 +00:00
gbinding.c gobject: Drop use of volatile from get_type() macros 2020-11-20 14:40:19 +00:00
gbinding.h gobject/: LGPLv2+ -> LGPLv2.1+ 2017-05-24 11:58:19 +02:00
gboxed.c gobject: Drop use of volatile from get_type() macros 2020-11-20 14:40:19 +00:00
gboxed.h gobject/: LGPLv2+ -> LGPLv2.1+ 2017-05-24 11:58:19 +02:00
gclosure.c gobject: Drop unnecessary volatile qualifiers from internal variables 2020-11-20 14:40:19 +00:00
gclosure.h gobject: Drop unnecessary volatile qualifiers from internal variables 2020-11-20 14:40:19 +00:00
genums.c gobject: Handle runtime checks as such 2020-05-20 17:37:46 +02:00
genums.h gobject/: LGPLv2+ -> LGPLv2.1+ 2017-05-24 11:58:19 +02:00
glib-enumtypes.c.template gobject: Drop use of volatile from get_type() macros 2020-11-20 14:40:19 +00:00
glib-enumtypes.h.template build: Rename gobjectenumtypes.[ch] to glib-enumtypes.[ch] 2019-03-04 11:12:59 +00:00
glib-genmarshal.in glib-genmarshal: Avoid a param ref for static param valist arguments 2019-06-18 11:59:11 +01:00
glib-mkenums.in glib-mkenums: allow optional 'since' tag 2020-05-14 17:00:54 +02:00
glib-types.h Add boxing for GTree 2020-10-07 11:00:11 +01:00
gmarshal.c minor typos in the documentation (a/an) 2019-08-24 19:14:05 +00:00
gmarshal.h gmarshal: Move marshaller documentation comments to above functions 2019-03-04 12:33:17 +00:00
gobject_gdb.py py: Various flake8 cleanups 2020-11-17 15:50:07 +00:00
gobject_probes.d Add missing semicolons to gobject_probes.d 2012-10-15 19:48:44 -04:00
gobject_trace.h build: Disable dtrace probes under static analysis 2019-09-05 14:16:58 +01:00
gobject-autocleanups.h gobject: Add g_autoptr() support for GTypeClass, GEnumClass, GFlagsClass 2018-05-15 15:38:33 +01:00
gobject-query.c Spelling: fix spelling of specify 2018-09-25 14:34:48 +01:00
gobject.c Merge branch 'th/gobject-new-parameter-list' into 'master' 2020-11-21 22:55:55 +00:00
gobject.h gobject: Drop volatile qualifier from GObject.ref_count 2020-11-20 14:40:19 +00:00
gobject.rc.in meson: build Windows resource files 2018-01-04 22:19:30 +01:00
gobject.stp.in glib: Namespace global tapset variables by soname 2016-11-23 10:50:39 +00:00
gobjectnotifyqueue.c gobject/: LGPLv2+ -> LGPLv2.1+ 2017-05-24 11:58:19 +02:00
gparam.c tree: Fix various typos and outdated terminology 2020-06-12 15:01:08 +01:00
gparam.h gobject: Add g_{param_spec,signal}_is_valid_name() functions 2020-03-04 14:46:28 +00:00
gparamspecs.c glib: Avoid redefining GLIB_DISABLE_DEPRECATION_WARNINGS 2020-07-27 15:41:09 +01:00
gparamspecs.h tree: Fix various typos and outdated terminology 2020-06-12 15:01:08 +01:00
gsignal.c gsignal: Plug g_signal_connect_object leak 2020-10-13 09:49:29 -04:00
gsignal.h gobject: Add g_{param_spec,signal}_is_valid_name() functions 2020-03-04 14:46:28 +00:00
gsourceclosure.c gobject: Drop use of volatile from get_type() macros 2020-11-20 14:40:19 +00:00
gsourceclosure.h gobject/: LGPLv2+ -> LGPLv2.1+ 2017-05-24 11:58:19 +02:00
gtype-private.h Use the GObject hole on 64bit arches for some flags to improve performance 2019-09-02 15:48:32 +02:00
gtype.c gtype: Add some missing atomic accesses to init_state 2020-11-20 14:41:07 +00:00
gtype.h gobject: Drop use of volatile from get_type() macros 2020-11-20 14:40:19 +00:00
gtypemodule.c all: Remove trailing newlines from g_message()/g_warning()/g_error()s 2018-04-27 16:46:19 +01:00
gtypemodule.h gtypemodule: Cast *_init functions to void(*)(void) first 2019-01-25 11:29:05 +00:00
gtypeplugin.c gobject: Standardise on the term ‘instantiatable’ 2020-11-02 17:22:01 +00:00
gtypeplugin.h gobject: Standardise on the term ‘instantiatable’ 2020-11-02 17:22:01 +00:00
gvalue.c value: Allow automatic transforms to/from interfaces 2020-11-02 17:36:18 +00:00
gvalue.h gvalue: Do copy non-interned strings 2020-06-23 10:30:55 +00:00
gvaluearray.c gvaluearray: Mark the whole of GValueArray as deprecated 2019-03-15 11:09:36 +00:00
gvaluearray.h Annotate various types and macros as deprecated 2019-05-30 10:39:11 +01:00
gvaluecollector.h tree: Fix various typos and outdated terminology 2020-06-12 15:01:08 +01:00
gvaluetransform.c gobject/: LGPLv2+ -> LGPLv2.1+ 2017-05-24 11:58:19 +02:00
gvaluetypes.c gvalue: Do copy non-interned strings 2020-06-23 10:30:55 +00:00
gvaluetypes.h GValue: Add interned string support 2020-05-19 17:52:55 +02:00
libgobject-gdb.py.in Rename gdb macros with _gdb suffix to avoid ns clashes 2016-05-23 10:52:10 -04:00
meson.build Meson: Override every dependency glib provides 2020-04-05 00:34:04 -04:00