glib/gobject
Christian Hergert eb8a33625e gobject: Separate GWeakRef from GWeakNotify
This patch is based upon Garrett Regier's work from 2015 to provide
some reliability and predictability to how disposal handles weak
reference state.

A primary problem is that GWeakRef and GWeakNotify state is shared and
therefore you cannot rely on GWeakRef status due to a GWeakNotify
calling into second-degree code.

It's important to ensure that both weak pointer locations and GWeakRef
will do the proper thing before user callbacks are executed during
disposal. Otherwise, user callbacks cannot rely on the status of their
weak pointers. That would be mostly okay but becomes an issue when
second degree objects are then disposed before any notification of
dependent object disposal.

Consider objects A and B.

`A` contains a reference to `B` and `B` contains a `GWeakRef` to `A`.
When `A` is disposed, `B` may be disposed as a consequence but has not
yet been notified that `A` has been disposed. It's `GWeakRef` may also
cause liveness issues if `GWeakNotify` on `A` result in tertiary code
running which wants to interact with `B`.

This example is analagous to how `GtkTextView` and `GtkTextBuffer` work
in text editing applications.

To provide application and libraries the ability to handle this using
already existing API, `GWeakRef` is separated into it's own GData quark
so that weak locations and `GWeakRef` are cleared before user code is
executed as a consequence of `GData` cleanup.

# Conflicts:
#	gobject/tests/signals.c
2023-08-25 14:25:47 -07:00
..
tests gobject: Separate GWeakRef from GWeakNotify 2023-08-25 14:25:47 -07:00
gatomicarray.c GAtomicArray: Ensure metadata does not misalign the payload 2023-01-29 12:36:06 +00:00
gatomicarray.h GAtomicArray: Ensure metadata does not misalign the payload 2023-01-29 12:36:06 +00:00
gbinding.c gbinding: Explicitly ignore return values from g_param_value_validate() 2022-10-18 15:12:31 +01:00
gbinding.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gbindinggroup.c gobject: add GBindingGroup 2022-01-28 16:01:22 -08:00
gbindinggroup.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gboxed.c gobject: Fix some annotations 2023-02-24 18:06:14 +01:00
gboxed.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gclosure.c gclosure: Use (transfer floating) for closure construction functions 2022-12-02 11:59:16 +00:00
gclosure.h Revert "Rename user data parameters to user_data" 2023-01-09 13:09:26 +01:00
genums.c Add SPDX license headers for LGPL-2.1-or-later to various files 2022-06-01 12:44:23 +01:00
genums.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
glib-enumtypes.c.template Revert "meson: Use gnome.mkenum_simple()" 2022-11-24 12:06:10 +00:00
glib-enumtypes.h.template Revert "meson: Use gnome.mkenum_simple()" 2022-11-24 12:06:10 +00:00
glib-genmarshal.in Replace all uses of G_VA_COPY with Standard C va_copy 2022-10-26 18:07:55 +01:00
glib-mkenums.in Take double-quote characters into account when parsing trigraph 2023-05-30 15:22:05 +02:00
glib-types.h Include GObject's visibility header 2023-01-08 00:33:47 +00:00
gmarshal.c Replace all uses of G_VA_COPY with Standard C va_copy 2022-10-26 18:07:55 +01:00
gmarshal.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gobject_gdb.py gobject_gdb.py: adapt to recent gsignal changes 2023-06-02 14:42:45 +01:00
gobject_probes.d Add missing semicolons to gobject_probes.d 2012-10-15 19:48:44 -04:00
gobject_trace.h Add SPDX license headers for LGPL-2.1-or-later to various files 2022-06-01 12:44:23 +01:00
gobject-autocleanups.h Add SPDX license headers for LGPL-2.1-or-later to various files 2022-06-01 12:44:23 +01:00
gobject-query.c Merge branch 'more-spdx' into 'main' 2022-07-05 11:06:49 +00:00
gobject.c gobject: Separate GWeakRef from GWeakNotify 2023-08-25 14:25:47 -07:00
gobject.h Rename all visibility macros 2022-10-13 20:53:56 -04: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 Replace most GObject warnings with criticals 2022-08-09 13:18:47 -05:00
gparam.c Merge branch 'mcatanzaro/gtype-criticals' into 'main' 2022-09-19 14:35:12 +00:00
gparam.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gparamspecs.c Empty values are not valid GParamSpec 2022-09-25 14:20:24 +01:00
gparamspecs.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gsignal.c gsignals: Do not zero two times the instance GValue's GType 2023-05-30 13:52:08 +01:00
gsignal.h Revert "Rename user data parameters to user_data" 2023-01-09 13:09:26 +01:00
gsignalgroup.c gobject/gsignalgroup: fix memory leaks on error 2022-05-17 17:34:06 +02:00
gsignalgroup.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gsourceclosure.c Add SPDX license headers for LGPL-2.1-or-later to various files 2022-06-01 12:44:23 +01:00
gsourceclosure.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gtype-private.h Merge branch 'more-spdx' into 'main' 2022-07-05 11:06:49 +00:00
gtype.c gtype: Allow g_type_query() to be called on dynamic types 2023-07-30 11:25:42 +03:00
gtype.h Annotate GTypeValueTable callbacks for availability 2023-05-30 14:38:16 +01:00
gtypemodule.c Replace most GObject warnings with criticals 2022-08-09 13:18:47 -05:00
gtypemodule.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gtypeplugin.c Add SPDX license headers for LGPL-2.1-or-later to various files 2022-06-01 12:44:23 +01:00
gtypeplugin.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gvalue.c gvalue: Fix a typo in a function name in an example in the docs 2023-03-23 12:24:33 +00:00
gvalue.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gvaluearray.c Add SPDX license headers for LGPL-2.1-or-later to various files 2022-06-01 12:44:23 +01:00
gvaluearray.h Rename all visibility macros 2022-10-13 20:53:56 -04:00
gvaluecollector.h Add SPDX license headers for LGPL-2.1-or-later to various files 2022-06-01 12:44:23 +01:00
gvaluetransform.c Add SPDX license headers for LGPL-2.1-or-later to various files 2022-06-01 12:44:23 +01:00
gvaluetypes.c gobject: Fix some annotations 2023-02-24 18:06:14 +01:00
gvaluetypes.h Rename all visibility macros 2022-10-13 20:53:56 -04: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 build: Don't overwrite build variables 2023-01-08 00:33:14 +00:00