Skip to content

Commit 53ad9ff

Browse files
committed
wayland: Make MetaWaylandBufferRef reference counted
So that we can have a more dynamic ownership. Original Mutter commit: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/798/diffs?commit_id=f36120757f4de3eead9245335bc497c596ed88df
1 parent 7272543 commit 53ad9ff

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/wayland/meta-wayland-surface.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,20 @@ meta_wayland_buffer_ref_new (void)
128128
MetaWaylandBufferRef *buffer_ref;
129129

130130
buffer_ref = g_new0 (MetaWaylandBufferRef, 1);
131+
g_ref_count_init (&buffer_ref->ref_count);
131132

132133
return buffer_ref;
133134
}
134135

135136
static void
136-
meta_wayland_buffer_ref_free (MetaWaylandBufferRef *buffer_ref)
137+
meta_wayland_buffer_ref_unref (MetaWaylandBufferRef *buffer_ref)
137138
{
138-
g_free (buffer_ref);
139+
if (g_ref_count_dec (&buffer_ref->ref_count))
140+
{
141+
g_warn_if_fail (buffer_ref->use_count == 0);
142+
g_clear_object (&buffer_ref->buffer);
143+
g_free (buffer_ref);
144+
}
139145
}
140146

141147
static void
@@ -1372,8 +1378,7 @@ wl_surface_destructor (struct wl_resource *resource)
13721378
if (surface->buffer_held)
13731379
meta_wayland_surface_unref_buffer_use_count (surface);
13741380
g_clear_pointer (&surface->texture, cogl_object_unref);
1375-
g_clear_object (&surface->buffer_ref->buffer);
1376-
g_clear_pointer (&surface->buffer_ref, meta_wayland_buffer_ref_free);
1381+
g_clear_pointer (&surface->buffer_ref, meta_wayland_buffer_ref_unref);
13771382

13781383
g_clear_object (&surface->cached_state);
13791384
g_clear_object (&surface->pending_state);

src/wayland/meta-wayland-surface.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ struct _MetaWaylandDragDestFuncs
142142

143143
typedef struct _MetaWaylandBufferRef
144144
{
145+
grefcount ref_count;
145146
MetaWaylandBuffer *buffer;
146147
unsigned int use_count;
147148
} MetaWaylandBufferRef;

0 commit comments

Comments
 (0)