In article CALOceq_ccA9118qZPpSQ763yaOnFecQLkzS1eEj_cZ271K1xiw@mail.gmail.com, rayfill rayfill@gmail.com wrote:
I use condition-wait in many acquire recursive-lock. Other thread try to acquire recusirve-lock's lock at dead locked.
Don't.
"Never use a recursive mutex with condition variables because the implicit unlock performed by pthread_cond_wait() or pthread_cond_timedwait() will not actually release the mutex if it had been locked multiple times." (see http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap02.html#t ag_22_02_09_08)
Partially releasing the recursive mutex on condition-wait will almost always result in a deadlock. However, fully releasing it may very well break invariants in sections of code that acquired the mutex, earlier in the call stack.
Paul Khuong