utils_gthread: Prevent deadlock caused by wait_idle 93/284993/1
authorJoonbum Ko <joonbum.ko@samsung.com>
Fri, 2 Dec 2022 07:17:32 +0000 (16:17 +0900)
committerJoonbum Ko <joonbum.ko@samsung.com>
Fri, 2 Dec 2022 07:17:35 +0000 (16:17 +0900)
commit6f1d2561a6019dfa595b3f00ffc629ffe1c213f0
treea303b3b1083a65d0682cbf335b93de669e89d4ba
parent907c24a620c03c868d0d1c933f8d8bc098612164
utils_gthread: Prevent deadlock caused by wait_idle

 Deadlock situation: Multi-threaded and multi surfaces for each thread

                        T2: call pause_in_idle()->wait_idle()
                            cond_wait() until idle signaled
 T1: call wait_idle()
     wait for lock idle_mutex
                        T2: _thread_idle_cb unlock idle_mutex,
                           set is_idle to TPL_TRUE
                           and wait to lock pause_mutex
 T1: change is_idle to TPL_FALSE
     cond_wait()
                        T2: cannot exit from while loop
                           still cond_wait()

 - is_idle changing should be set TPL_FALSE after cond_wait finished

Change-Id: I44292e486a1b9f686ec28bc0ae10ddedf94a48e3
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/tpl_utils_gthread.c