need_to_wait = (status < COMMITTED);
if (need_to_wait) {
- tpl_gmutex_unlock(&wl_egl_display->wl_event_mutex);
+ /* The lock/unlock order of buffer->mutex and display->wl_event_mutex
+ * is important. display->mutex must surround buffer->mutex */
+ tpl_gmutex_unlock(&wl_egl_buffer->mutex);
wait_result = tpl_gcond_timed_wait(&wl_egl_buffer->cond,
- &wl_egl_buffer->mutex,
- 200); /* 200ms */
- tpl_gmutex_lock(&wl_egl_display->wl_event_mutex);
+ &wl_egl_display->wl_event_mutex,
+ 200); /* 200ms */
+ tpl_gmutex_lock(&wl_egl_buffer->mutex);
if (wait_result == TPL_ERROR_TIME_OUT)
TPL_WARN("timeout occured waiting signaled. wl_egl_buffer(%p)",