status_to_string[status]);
if (status >= ENQUEUED) {
- tpl_bool_t need_to_wait = TPL_FALSE;
tpl_result_t wait_result = TPL_ERROR_NONE;
- need_to_wait = (status < COMMITTED);
-
- if (need_to_wait) {
+ while (status < COMMITTED && wait_result != TPL_ERROR_TIME_OUT) {
+ tpl_gmutex_unlock(&wl_egl_buffer->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_display->wl_event_mutex,
200); /* 200ms */
tpl_gmutex_lock(&wl_egl_buffer->mutex);
+ status = wl_egl_buffer->status; /* update status */
if (wait_result == TPL_ERROR_TIME_OUT)
TPL_WARN("timeout occured waiting signaled. wl_egl_buffer(%p)",
}
}
- status = wl_egl_buffer->status; /* update status */
-
/* ACQUIRED, WAITING_SIGNALED, WAITING_VBLANK, COMMITTED */
/* It has been acquired but has not yet been released, so this
* buffer must be released. */