diff options
author | Jonas Ådahl <jadahl@gmail.com> | 2019-09-11 21:52:58 +0200 |
---|---|---|
committer | Jonas Ådahl <jadahl@gmail.com> | 2020-04-16 14:08:19 +0200 |
commit | f36120757f4de3eead9245335bc497c596ed88df (patch) | |
tree | 3d85bdbf974ae8a69a91c51def3fd888cc3f093f | |
parent | bc178b711ffbd8db0b7cfecefb6f67edf4e0254f (diff) | |
download | mutter-f36120757f4de3eead9245335bc497c596ed88df.tar.gz |
wayland: Make MetaWaylandBufferRef reference counted
So that we can have a more dynamic ownership.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/798
-rw-r--r-- | src/wayland/meta-wayland-surface.c | 13 | ||||
-rw-r--r-- | src/wayland/meta-wayland-surface.h | 1 |
2 files changed, 10 insertions, 4 deletions
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c index e80c722fa..c3d56d74d 100644 --- a/src/wayland/meta-wayland-surface.c +++ b/src/wayland/meta-wayland-surface.c @@ -126,14 +126,20 @@ meta_wayland_buffer_ref_new (void) MetaWaylandBufferRef *buffer_ref; buffer_ref = g_new0 (MetaWaylandBufferRef, 1); + g_ref_count_init (&buffer_ref->ref_count); return buffer_ref; } static void -meta_wayland_buffer_ref_free (MetaWaylandBufferRef *buffer_ref) +meta_wayland_buffer_ref_unref (MetaWaylandBufferRef *buffer_ref) { - g_free (buffer_ref); + if (g_ref_count_dec (&buffer_ref->ref_count)) + { + g_warn_if_fail (buffer_ref->use_count == 0); + g_clear_object (&buffer_ref->buffer); + g_free (buffer_ref); + } } static void @@ -1295,8 +1301,7 @@ wl_surface_destructor (struct wl_resource *resource) if (surface->buffer_held) meta_wayland_surface_unref_buffer_use_count (surface); g_clear_pointer (&surface->texture, cogl_object_unref); - g_clear_object (&surface->buffer_ref->buffer); - g_clear_pointer (&surface->buffer_ref, meta_wayland_buffer_ref_free); + g_clear_pointer (&surface->buffer_ref, meta_wayland_buffer_ref_unref); g_clear_object (&surface->cached_state); g_clear_object (&surface->pending_state); diff --git a/src/wayland/meta-wayland-surface.h b/src/wayland/meta-wayland-surface.h index b4ffeb338..9cedba506 100644 --- a/src/wayland/meta-wayland-surface.h +++ b/src/wayland/meta-wayland-surface.h @@ -138,6 +138,7 @@ struct _MetaWaylandDragDestFuncs typedef struct _MetaWaylandBufferRef { + grefcount ref_count; MetaWaylandBuffer *buffer; unsigned int use_count; } MetaWaylandBufferRef; |