Fixed to add release listener before wl_surface_commit.
authorJoonbum Ko <joonbum.ko@samsung.com>
Wed, 3 Jun 2020 09:25:45 +0000 (18:25 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 10 Aug 2020 08:15:15 +0000 (17:15 +0900)
Change-Id: Iffaac088a0699680bfeb7caefeca7873b71e6e0f
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/tpl_wayland_egl_thread.c

index 291afa087a1438567f4c37f222294acbe93b6e44..22795ca9635fd4f3bf106516b7f2c1647acf9609 100755 (executable)
@@ -1811,14 +1811,6 @@ _twe_surface_set_wl_buffer_info(twe_wl_surf_source *surf_source,
                        g_mutex_unlock(&surf_source->surf_mutex);
                }
 
-               if (surf_source->disp_source->use_explicit_sync &&
-                       surf_source->use_surface_sync) {
-                       buf_info->buffer_release =
-                               zwp_linux_surface_synchronization_v1_get_release(surf_source->surface_sync);
-                       zwp_linux_buffer_release_v1_add_listener(
-                               buf_info->buffer_release, &explicit_sync_release_listner, tbm_surface);
-               }
-
                TRACE_MARK("[SET_BUFFER_INFO] BO(%d)",
                                   tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0)));
 
@@ -1912,17 +1904,6 @@ _twe_surface_set_wl_buffer_info(twe_wl_surf_source *surf_source,
                                                                                         buf_info->sync_timeline);
        }
 
-       if (surf_source->disp_source->use_explicit_sync &&
-               surf_source->use_surface_sync) {
-               buf_info->buffer_release =
-                       zwp_linux_surface_synchronization_v1_get_release(surf_source->surface_sync);
-               zwp_linux_buffer_release_v1_add_listener(
-                       buf_info->buffer_release, &explicit_sync_release_listner, tbm_surface);
-       } else {
-               wl_buffer_add_listener((void *)buf_info->wl_buffer,
-                                                          &wl_buffer_release_listener, tbm_surface);
-       }
-
        tbm_surface_internal_add_user_data(tbm_surface, KEY_BUFFER_INFO,
                                                                           (tbm_data_free)__cb_twe_buffer_free_callback);
        tbm_surface_internal_set_user_data(tbm_surface, KEY_BUFFER_INFO,
@@ -2463,6 +2444,20 @@ _twe_thread_wl_surface_commit(twe_wl_surf_source *surf_source,
 
        buf_info->need_to_release = TPL_TRUE;
 
+       if (surf_source->disp_source->use_explicit_sync &&
+               surf_source->use_surface_sync) {
+               buf_info->buffer_release =
+                       zwp_linux_surface_synchronization_v1_get_release(surf_source->surface_sync);
+               if (!buf_info->buffer_release) {
+                       TPL_ERR("Failed to get buffer_release. twe_surface(%p)", surf_source);
+               } else {
+                       zwp_linux_buffer_release_v1_add_listener(
+                               buf_info->buffer_release, &explicit_sync_release_listner, tbm_surface);
+                       TPL_DEBUG("add explicit_sync_release_listener.");
+               }
+
+       }
+
        wl_surface_commit(wl_surface);
 
        wl_display_flush(surf_source->disp_source->disp);