Problem : DEQ -> ENQ -> ACQ -> VBLANK -> COMMIT -> RELEASE
-> QUEUE_RESET -> last_deq_buffer free
-> try DEQ !!< will be blocked.
Init wl_egl_surface->last_deq_buffer to NULL when it was free
to prevent to access the wrong pointer of last_deq_buffer.
Change-Id: Ic619b6a27a098b3de06c5733cec171538f921165
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
tpl_wl_egl_buffer_t *last_deq_buffer = wl_egl_surface->last_deq_buffer;
tpl_gmutex_lock(&last_deq_buffer->mutex);
- if (last_deq_buffer->status > RELEASED &&
+ if (last_deq_buffer->status > ENQUEUED &&
last_deq_buffer->status < COMMITTED) {
tpl_result_t wait_result;
wait_result = tpl_cond_timed_wait(&last_deq_buffer->cond,
wl_egl_buffer->idx = -1;
}
+
+ if (wl_egl_surface->last_deq_buffer == wl_egl_buffer)
+ wl_egl_surface->last_deq_buffer = NULL;
+
tpl_gmutex_unlock(&wl_egl_surface->buffers_mutex);
if (wl_egl_surface->vblank && wl_egl_surface->vblank->waiting_buffers) {