e_hwc_windows: Fix deadlock when e_hwc_window is freed 75/259875/4 accepted/tizen/unified/20210617.124858 submit/tizen/20210616.110744
authorChangyeon Lee <cyeon.lee@samsung.com>
Wed, 16 Jun 2021 06:03:23 +0000 (15:03 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Wed, 16 Jun 2021 10:10:16 +0000 (19:10 +0900)
commit3c06dae07c6c51e77cee42ba9fbb71d054f08ef7
tree1db5ccb935c89fee43b24129c97efcf85592626e
parent5d4a60bf8e63a7fa573bd0ce3f26fda57b5cf339
e_hwc_windows: Fix deadlock when e_hwc_window is freed

after tbm_surface of E_Hwc_Window_Update is referenced,
it is possible that unreferenced api of tbm_surface
(tbm_surface_internal_unref) is called when e_hwc_window
is freed.

e_hwc_windows add rendererd_windows list to user_data of
tbm_surface of target_window
rendered_windows list has reference of e_hwc_window and
unreference of e_hwc_window can be called when rendered_windows
list is freed in user_data delete callback of tbm_surface.

but it cause deadlock problem when tbm_surface_internal_unref
is called in callback of tbm_surface
because libtbm doesn't allow that tbm_surface api is called
in callback of tbm_surface.

so e_hwc_windows doesn't use user_data of tbm_surface for
rendered_buffer and rendered_windows list.
they are added to member of E_Hwc_Window_Comp_Info.
E_Hwc_Window_Comp_Info isn't freed in user_data deleted
callback.

Change-Id: I40deba667bbfb7bbfba2807830e823faa90c07b4
src/bin/e_hwc_windows.c