tbm_server: Unreference tbm_surface when ds_buffer is destroyed 40/301140/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 6 Nov 2023 00:53:04 +0000 (09:53 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 9 Nov 2023 10:02:41 +0000 (19:02 +0900)
Although a wl_buffer resource is destroyed, a tbm_surface associated
with the wl_buffer still has to stay alive because we increases
reference count of tbm_surface with tbm_surface_internal_ref().
Since we don't need to drop the reference count of tbm_surface even when
wl_buffer resource is destroyed, so it's reasonable that we keep the
tbm_surface until ds_buffer is destroyed.

Change-Id: I58cd008f965b1cf84671eba3bfa774274d0df957

src/tbm_server/tbm_server.c

index 0001d9f..3e3499b 100644 (file)
@@ -110,10 +110,6 @@ tbm_client_buffer_handle_resource_destroy(struct wl_listener *listener,
     buffer = wl_container_of(listener, buffer, resource_destroy);
 
     buffer->resource = NULL;
-
-    tbm_surface_internal_unref(buffer->surface);
-    buffer->surface = NULL;
-
     wl_list_remove(&buffer->resource_destroy.link);
     wl_list_init(&buffer->resource_destroy.link);
 
@@ -136,6 +132,7 @@ tbm_client_buffer_iface_destroy(struct ds_buffer *ds_buffer)
 
     ds_dbg("Destroy TBM client buffer(%p)", buffer);
 
+    tbm_surface_internal_unref(buffer->surface);
     wl_list_remove(&buffer->resource_destroy.link);
     wl_list_remove(&buffer->buffer_release.link);
     free(buffer);