int allocated;
int reuse;
int usable;
+ int expire;
int width;
int height;
wl_list_for_each_safe(buffer, tmp, &queue_info->attach_bufs, link) {
if (buffer->allocated) {
*need_flush = 1;
+ buffer->expire = 1;
continue;
}
#ifdef DEBUG_TRACE
if (queue_info->is_active && queue_info->active_flush) {
wl_list_for_each_reverse(buffer, &queue_info->attach_bufs, link) {
- if (!buffer->allocated && buffer->usable) {
+ if (!buffer->allocated && buffer->usable && !buffer->expire) {
if (_wayland_tbm_client_is_valid_attach_bufs(queue_info, buffer)) {
surface = buffer->tbm_surface;
/* ref.. pair of __wayland_tbm_client_surface_free_cb */
buffer->allocated = 0;
buffer->reuse = 1;
- if (queue_info->is_active) continue;
+ if (queue_info->is_active && !buffer->expire) continue;
if (buffer->wl_buffer)
wl_tbm_queue_detach_buffer(queue_info->wl_tbm_queue, buffer->wl_buffer);
pthread_mutex_lock(&queue_info->lock);
if (queue_info->is_active && queue_info->active_flush) {
+
if (num)
- *num = wl_list_length(&queue_info->attach_bufs);
+ *num = 0;
- if (surfaces) {
- wl_list_for_each(buffer, &queue_info->attach_bufs, link) {
+ wl_list_for_each(buffer, &queue_info->attach_bufs, link) {
+ if (buffer->expire) continue;
+
+ if (surfaces) {
surfaces[index] = buffer->tbm_surface;
index++;
}
+
+ if (num) *num = *num + 1;
}
pthread_mutex_unlock(&queue_info->lock);