server: Add wayland_tbm_server_client_queue_set_destroy_cb 47/264847/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Fri, 1 Oct 2021 02:36:21 +0000 (11:36 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Fri, 1 Oct 2021 02:36:21 +0000 (11:36 +0900)
Change-Id: Id59375647f91b9927a6dfe25bf062fba73ee2942

src/wayland-tbm-server.c
src/wayland-tbm-server.h

index 4018b09a0a940faec276a4fc9d3346e2eb1b1bd5..a6f873b004267ebe79cce74101df8a360d5d236d 100644 (file)
@@ -98,6 +98,9 @@ struct wayland_tbm_client_queue {
        wayland_tbm_server_client_queue_wait_usable_cb wait_usable_cb;
        void *wait_usable_cb_data;
 
+       wayland_tbm_server_client_queue_destroy_cb destroy_cb;
+       void *destroy_cb_data;
+
        struct wl_list link;
 };
 
@@ -617,6 +620,9 @@ _wayland_tbm_server_surface_queue_destroy(struct wl_resource *wl_tbm_queue)
 #ifdef DEBUG_TRACE
                WL_TBM_TRACE("destory queue. pid:%d", cqueue->pid);
 #endif
+               if (cqueue->destroy_cb)
+                       cqueue->destroy_cb(cqueue, cqueue->destroy_cb_data);
+
                wl_list_remove(&cqueue->link);
                free(cqueue);
 
@@ -1199,6 +1205,22 @@ wayland_tbm_server_client_queue_set_wait_usable_cb(struct wayland_tbm_client_que
        return 1;
 }
 
+int
+wayland_tbm_server_client_queue_set_destroy_cb(struct wayland_tbm_client_queue *cqueue,
+                                       wayland_tbm_server_client_queue_destroy_cb destroy_cb, void *user_data)
+{
+       WL_TBM_RETURN_VAL_IF_FAIL(cqueue != NULL, 0);
+       WL_TBM_RETURN_VAL_IF_FAIL(cqueue->wl_tbm_queue != NULL, 0);
+
+#ifdef DEBUG_TRACE
+       WL_TBM_TRACE("    pid:%d", cqueue->pid);
+#endif
+       cqueue->destroy_cb = destroy_cb;
+       cqueue->destroy_cb_data = user_data;
+
+       return 1;
+}
+
 int
 wayland_tbm_server_client_queue_send_buffer_usable(struct wayland_tbm_client_queue *cqueue,
                                struct wl_resource *wl_buffer)
index df3cc25b7d88fa5d88f5e6fed472f521ce080868..853b126d4e9a7a450b10e9f045a84f594d90bc55 100644 (file)
@@ -51,6 +51,9 @@ typedef void (*wayland_tbm_server_client_queue_dequeue_cb) (struct wayland_tbm_c
 typedef void (*wayland_tbm_server_client_queue_wait_usable_cb) (struct wayland_tbm_client_queue *cqueue,
                                        void *data);
 
+typedef void (*wayland_tbm_server_client_queue_destroy_cb) (struct wayland_tbm_client_queue *cqueue,
+                                       void *data);
+
 struct wayland_tbm_server *
 wayland_tbm_server_init(struct wl_display *display,
                        const char *device_name,
@@ -140,6 +143,10 @@ int
 wayland_tbm_server_client_queue_set_wait_usable_cb(struct wayland_tbm_client_queue *cqueue,
                                        wayland_tbm_server_client_queue_wait_usable_cb wait_usable_cb, void *user_data);
 
+int
+wayland_tbm_server_client_queue_set_destroy_cb(struct wayland_tbm_client_queue *cqueue,
+                                       wayland_tbm_server_client_queue_destroy_cb destroy_cb, void *user_data);
+
 #ifdef  __cplusplus
 }
 #endif