glib/gobject
Marco Trevisan (Treviño) ea68b22135 gobject: Cleanup GWeakRef locations on object finalization
It can happen that a GWeakRef is added to an object while it's disposing
(or even during finalizing) and this may happen in a thread that (weak)
references an object while the disposal isn't completed yet or when
using toggle references and switching to GWeakRef on notification (as
the API suggests).

In such scenario the weak locations are not cleaned up when the object
is finalized, and will point to a free'd area.

So, during finalization and when we're sure that the object will be
destroyed for sure, check again if there are new weak locations and
unset them if any as part of the qdata destruction.
Do this adding a new utility function so that we can avoid duplicating
code to free the weak locations.

Added various tests simulating this case.

Fixes: #2390
2021-09-17 12:21:23 +02:00
..
tests gobject: Cleanup GWeakRef locations on object finalization 2021-09-17 12:21:23 +02: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 docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gbinding.h docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gboxed.c docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gboxed.h gobject/: LGPLv2+ -> LGPLv2.1+ 2017-05-24 11:58:19 +02:00
gclosure.c Revert "Merge branch 'fix/gclosure-invoke-type-annotation' into 'main'" 2021-08-29 20:56:08 +00:00
gclosure.h docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
genums.c genums: Add missing (transfer) and (nullable) return annotations 2020-12-11 23:48:35 +00:00
genums.h gobject/: LGPLv2+ -> LGPLv2.1+ 2017-05-24 11:58:19 +02:00
glib-enumtypes.c.template Fix a Unicode typo 2021-07-29 10:09:27 -04: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: close output file 2021-03-03 12:24:29 +06:00
glib-mkenums.in glib-mkenums: Parse and skip deprecation/availability annotations 2021-03-11 13:37:49 +00:00
glib-types.h boxed: Register GPatternSpec as boxed type 2021-04-27 16:25:09 +02: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 gobject: Cleanup GWeakRef locations on object finalization 2021-09-17 12:21:23 +02:00
gobject.h docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01: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 docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gparam.h docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gparamspecs.c Clarify GValue documentation 2021-07-12 10:40:33 +00:00
gparamspecs.h docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gsignal.c doc: Explicitly said, that no null term. is needed 2021-09-06 11:23:14 +00:00
gsignal.h docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01: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 docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gtype.h docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gtypemodule.c docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gtypemodule.h docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gtypeplugin.c docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gtypeplugin.h gobject: Standardise on the term ‘instantiatable’ 2020-11-02 17:22:01 +00:00
gvalue.c docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gvalue.h docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01: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 docs: Start stanzas with a single paragraph 2021-08-02 13:22:23 +01:00
gvaluetransform.c gobject/: LGPLv2+ -> LGPLv2.1+ 2017-05-24 11:58:19 +02:00
gvaluetypes.c g_value_set_string description: clarified (unified), that v_string is a copy. 2021-06-23 05:50:59 +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