queue_buffer->copying = EINA_FALSE;
if ((!queue_buffer->acquired) && (queue_buffer->dequeued))
- e_hwc_window_queue_buffer_release(copy_thread_data->queue, queue_buffer);
+ {
+ if ((copy_thread_data->queue->state == E_HWC_WINDOW_QUEUE_STATE_UNSET_WAITING) &&
+ (queue_buffer->usable) && (queue_buffer->exported))
+ {
+ EHWQINF("Wait detach ts:%p tq:%p", NULL, NULL, copy_thread_data->queue,
+ queue_buffer->tsurface, copy_thread_data->queue->tqueue);
+ }
+ else
+ {
+ e_hwc_window_queue_buffer_release(copy_thread_data->queue, queue_buffer);
+ }
+ }
}
e_object_unref(E_OBJECT(copy_thread_data->queue));
if (ref->buffer->busy == 0)
{
if (ref->buffer->queue)
- e_hwc_window_queue_buffer_release(ref->buffer->queue, ref->buffer);
+ {
+ if ((ref->buffer->queue->state == E_HWC_WINDOW_QUEUE_STATE_UNSET_WAITING) &&
+ (ref->buffer->usable) && (ref->buffer->exported))
+ {
+ ref->buffer->acquired = EINA_FALSE;
+ ref->buffer->dequeued = EINA_TRUE;
+
+ EHWQINF("Wait detach ts:%p tq:%p", NULL, NULL, ref->buffer->queue,
+ ref->buffer->tsurface, ref->buffer->queue->tqueue);
+ }
+ else
+ {
+ e_hwc_window_queue_buffer_release(ref->buffer->queue, ref->buffer);
+ }
+ }
}
if (ref->destroy_listener.notify)