ecore_evas buffer: fix a deadlock issue.
authorHermet Park <hermetpark@gmail.com>
Mon, 22 Jul 2019 08:14:10 +0000 (17:14 +0900)
committerSangHyeon Jade Lee <sh10233.lee@samsung.com>
Tue, 23 Jul 2019 05:09:21 +0000 (14:09 +0900)
commit6208a89731dc0150879f59a40cdc3e628768310c
tree3b702b543141cfb11c45c570c5b8b88afb1e432b
parenteedcb3ea2a6bca596c7b27c04484d35206675db3
ecore_evas buffer: fix a deadlock issue.

We encountered a deadlock case in ecore_evas_image_object in ecore_evas_buffer
that only happens if the ecore_evas_buffer has nothing changed to render,
though it's triggered to rendering.

See this normal scenario that is working fine as our intention.

being ecore_evas_render()
...
 -> ecore_evas_buffer_prepare()
     -> evas_object_image_data_get()
         -> increment lock by backend engine. (egl/tbm ...)
 -> render()
     -> render_post()
        -> _ecore_evas_buffer_update_image()
            -> evas_object_image_data_set()
               ->decrement lock by backend engine (egl/tbm ...)
...
end ecore_evas_render()

The problem is, if the ecore_evas_buffer canvas doesn't changed at all,
render post will be skipped, it could lose the chance to unlock the image data.
Now the host can't render anymore since it's image source lost the lock.

@fix