[gnome-shell/wip/carlosg/weak-ref-source: 42/42] st: Keep weak ref on texture cache bound texture source
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/carlosg/weak-ref-source: 42/42] st: Keep weak ref on texture cache bound texture source
- Date: Mon, 15 Feb 2021 21:09:56 +0000 (UTC)
commit 87558efbf130ec64b445da808b2bc162aebf352d
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Feb 12 23:10:25 2021 +0100
st: Keep weak ref on texture cache bound texture source
We don't keep any ref on it, so it might leave us with a dangling
pointer here.
Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3491
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1672>
src/st/st-texture-cache.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
---
diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
index 89620706cb..07b1166a1b 100644
--- a/src/st/st-texture-cache.c
+++ b/src/st/st-texture-cache.c
@@ -798,6 +798,10 @@ st_texture_cache_bind_weak_notify (gpointer data,
{
StTextureCachePropertyBind *bind = data;
bind->weakref_active = FALSE;
+ if (G_OBJECT (bind->image) != source_location)
+ g_object_weak_unref (G_OBJECT (bind->image), st_texture_cache_bind_weak_notify, bind);
+ if (bind->source != source_location)
+ g_object_weak_unref (G_OBJECT (bind->source), st_texture_cache_bind_weak_notify, bind);
g_signal_handler_disconnect (bind->source, bind->notify_signal_id);
}
@@ -805,8 +809,13 @@ static void
st_texture_cache_free_bind (gpointer data)
{
StTextureCachePropertyBind *bind = data;
+
if (bind->weakref_active)
- g_object_weak_unref (G_OBJECT (bind->image), st_texture_cache_bind_weak_notify, bind);
+ {
+ g_object_weak_unref (G_OBJECT (bind->image), st_texture_cache_bind_weak_notify, bind);
+ g_object_weak_unref (G_OBJECT (bind->source), st_texture_cache_bind_weak_notify, bind);
+ }
+
g_free (bind);
}
@@ -840,6 +849,7 @@ st_texture_cache_bind_cairo_surface_property (StTextureCache *cache,
st_texture_cache_reset_texture (bind, property_name);
g_object_weak_ref (G_OBJECT (bind->image), st_texture_cache_bind_weak_notify, bind);
+ g_object_weak_ref (G_OBJECT (bind->source), st_texture_cache_bind_weak_notify, bind);
bind->weakref_active = TRUE;
notify_key = g_strdup_printf ("notify::%s", property_name);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]