ecore_evas buffer: fix a deadlock issue. 44/210544/1
authorHermet Park <hermetpark@gmail.com>
Mon, 22 Jul 2019 08:14:10 +0000 (17:14 +0900)
committerHermet Park <hermetpark@gmail.com>
Mon, 22 Jul 2019 08:36:00 +0000 (17:36 +0900)
commit6ece36ebc0666180c87aecb4a01adafee7a61457
tree52b74e3a9a9d43535b3a290f2b44b60e5c454284
parent1c7c46adbda820127a63a6f474e4830ed914c160
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

Change-Id: I1d902351698d7aa51efc6b7c561c3b597e6f3c25
src/lib/ecore_evas/ecore_evas_buffer.c
src/lib/ecore_evas/ecore_evas_buffer.h