Make to operate normally even when tdm_source was unexpectedly destroyed. 12/228912/1
authorJoonbum Ko <joonbum.ko@samsung.com>
Thu, 26 Mar 2020 09:08:15 +0000 (18:08 +0900)
committerJoonbum Ko <joonbum.ko@samsung.com>
Thu, 26 Mar 2020 09:08:15 +0000 (18:08 +0900)
Change-Id: If3a39100b1922a840a16b1860ff427c532883102
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/tpl_wayland_egl_thread.c

index ceef070..b1c1f4e 100755 (executable)
@@ -1868,6 +1868,13 @@ _twe_surface_wait_vblank(twe_wl_surf_source *surf_source)
 
        if (!_twe_ctx->tdm_source) {
                TPL_WARN("tdm_vblank feature is disabled.");
+
+               if (surf_source->vblank) {
+                       tdm_client_vblank_destroy(surf_source->vblank);
+                       surf_source->vblank = NULL;
+                       surf_source->vblank_done = TPL_TRUE;
+               }
+
                return TPL_ERROR_INVALID_OPERATION;
        }
 
@@ -1967,7 +1974,8 @@ _twe_thread_wl_vk_surface_commit(twe_wl_surf_source *surf_source,
                        == TPL_DISPLAY_PRESENT_MODE_FIFO_RELAXED ||
                        surf_source->swapchain_properties.present_mode
                        == TPL_DISPLAY_PRESENT_MODE_FIFO) {
-               if (_twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
+               if ((_twe_ctx->tdm_source || surf_source->vblank) &&
+                       _twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
                        TPL_ERR("Failed to set wait vblank");
        }
 
@@ -2187,7 +2195,8 @@ _twe_thread_wl_surface_commit(twe_wl_surf_source *surf_source,
                          buf_info->wl_buffer, tbm_surface,
                          tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0)));
 
-       if (_twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
+       if ((_twe_ctx->tdm_source || surf_source->vblank) &&
+               _twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
                TPL_ERR("Failed to set wait vblank.");
 
 
@@ -2303,7 +2312,8 @@ _twe_thread_wl_surface_acquire_and_commit(twe_wl_surf_source *surf_source)
                                surf_source->draw_done_buffer = tbm_surface;
 
                                if (surf_source->vblank_done) {
-                                       if (_twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
+                                       if ((_twe_ctx->tdm_source || surf_source->vblank) &&
+                                               _twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
                                                TPL_ERR("Failed to set wait vblank");
                                }
                                break;
@@ -2650,6 +2660,7 @@ _twe_thread_wl_surf_source_destroy(void *source)
                TPL_LOG_T(BACKEND, "[VBLANK FINI] twe_wl_surf_source(%p) vblank(%p)",
                                  surf_source, surf_source->vblank);
                tdm_client_vblank_destroy(surf_source->vblank);
+               surf_source->vblank = NULL;
        }
 
        surf_source->cb_data = NULL;