From: Changyeon Lee Date: Thu, 23 Jan 2020 07:12:36 +0000 (+0900) Subject: e_hwc_window_queue: release tbm_surface of unknown queue in buffer_change cb X-Git-Tag: submit/tizen/20200206.060445~11 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9d30c56eaefa479f0d3e844271aebaa0cb78337b;p=platform%2Fupstream%2Fenlightenment.git e_hwc_window_queue: release tbm_surface of unknown queue in buffer_change cb in case hwc_window attached queue buffer and had not queue, checked all queue and released queue_buffer to queue. Change-Id: I98cb8890b596eda671706b9cecb063a2ed473596 --- diff --git a/src/bin/e_hwc_window_queue.c b/src/bin/e_hwc_window_queue.c index c60ec2fd88..fdd3425d6a 100644 --- a/src/bin/e_hwc_window_queue.c +++ b/src/bin/e_hwc_window_queue.c @@ -1067,12 +1067,33 @@ _e_hwc_window_queue_unset(E_Hwc_Window_Queue *queue) e_object_unref(E_OBJECT(queue)); } +static void +_e_hwc_window_unkown_queue_release(tbm_surface_h tsurface) +{ + Eina_Iterator *it; + E_Hwc_Window_Queue *queue; + E_Hwc_Window_Queue_Buffer *queue_buffer; + + it = eina_hash_iterator_data_new(_hwc_winq_mgr->hwc_winq_hash); + if (!it) return; + + EINA_ITERATOR_FOREACH(it, queue) + { + queue_buffer = e_hwc_window_queue_buffer_find(queue, tsurface); + if (!queue_buffer) return; + + if (!queue_buffer->acquired && queue_buffer->dequeued) + e_hwc_window_queue_buffer_release(queue, queue_buffer); + } + + eina_iterator_free(it); +} + static void _e_hwc_window_queue_cb_buffer_change(void *data, E_Client *ec) { E_Hwc_Window *hwc_window = NULL; E_Comp_Wl_Buffer *comp_buffer; - E_Hwc_Window_Queue_Buffer *queue_buffer; uint32_t flags = 0; tbm_surface_h tsurface; @@ -1101,15 +1122,8 @@ _e_hwc_window_queue_cb_buffer_change(void *data, E_Client *ec) return; tsurface = _e_hwc_window_queue_backup_buffer_set(hwc_window, EINA_FALSE); - if (tsurface && hwc_window->queue) - { - queue_buffer = e_hwc_window_queue_buffer_find(hwc_window->queue, tsurface); - if (queue_buffer) - { - if (!queue_buffer->acquired && queue_buffer->dequeued) - e_hwc_window_queue_buffer_release(hwc_window->queue, queue_buffer); - } - } + if (tsurface) + _e_hwc_window_unkown_queue_release(tsurface); } void