Fixed a bug that could cause deadlock. 92/231992/1
authorJoonbum Ko <joonbum.ko@samsung.com>
Mon, 27 Apr 2020 07:29:50 +0000 (16:29 +0900)
committerJoonbum Ko <joonbum.ko@samsung.com>
Mon, 27 Apr 2020 07:29:50 +0000 (16:29 +0900)
Change-Id: Idb231c020b08e60aa3e2368562551a7e06cfd61b
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/tpl_wayland_egl_thread.c

index a5801ec0ce5c8c53bdce10007b2814af17c429a9..f8151935f33c584060b7f2cc0365456062a3d75c 100755 (executable)
@@ -2294,7 +2294,6 @@ _twe_thread_wl_surface_acquire_and_commit(twe_wl_surf_source *surf_source)
                tbm_surface_internal_get_user_data(tbm_surface, KEY_BUFFER_INFO,
                                                                                   (void **)&buf_info);
 
-               g_mutex_lock(&surf_source->surf_mutex);
                if (!disp_source->is_vulkan_dpy) { /* wayland_egl */
                        if (surf_source->vblank_done) {
                                TPL_LOG_T(BACKEND, "[ACQ] tbm_surface(%p) bo(%d)",
@@ -2363,7 +2362,6 @@ _twe_thread_wl_surface_acquire_and_commit(twe_wl_surf_source *surf_source)
                                break;
                        }
                }
-               g_mutex_unlock(&surf_source->surf_mutex);
        }
 }
 
@@ -3289,13 +3287,13 @@ _twe_thread_fence_wait_source_dispatch(GSource *source, GSourceFunc cb, gpointer
 
        TRACE_ASYNC_END((int)wait_source, "FENCE WAIT fd(%d)", wait_source->fence_fd);
 
+       g_mutex_lock(&surf_source->surf_mutex);
        /* Since this source is going to be removed, acquire_and_commit must be
         * executed even in a situation other than G_IO_IN.
         * Nevertheless, there may be room for improvement. */
        _twe_thread_wl_surface_acquire_and_commit(surf_source);
        tbm_surface_internal_unref(tbm_surface);
 
-       g_mutex_lock(&surf_source->surf_mutex);
        __tpl_list_remove_data(surf_source->fence_waiting_sources,
                                                   (void *)wait_source, TPL_FIRST, NULL);
        g_mutex_unlock(&surf_source->surf_mutex);