File tree Expand file tree Collapse file tree 2 files changed +10
-4
lines changed Expand file tree Collapse file tree 2 files changed +10
-4
lines changed Original file line number Diff line number Diff 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
135136static 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
141147static 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 );
Original file line number Diff line number Diff line change @@ -142,6 +142,7 @@ struct _MetaWaylandDragDestFuncs
142142
143143typedef struct _MetaWaylandBufferRef
144144{
145+ grefcount ref_count ;
145146 MetaWaylandBuffer * buffer ;
146147 unsigned int use_count ;
147148} MetaWaylandBufferRef ;
You can’t perform that action at this time.
0 commit comments