e_hwc_window_queue: release tbm_surface of unknown queue in buffer_change cb 19/223319/2
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 23 Jan 2020 07:12:36 +0000 (16:12 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Wed, 29 Jan 2020 12:42:46 +0000 (12:42 +0000)
in case hwc_window attached queue buffer and had not queue,
checked all queue and released queue_buffer to queue.

Change-Id: I98cb8890b596eda671706b9cecb063a2ed473596

src/bin/e_hwc_window_queue.c

index c60ec2f..fdd3425 100644 (file)
@@ -1068,11 +1068,32 @@ _e_hwc_window_queue_unset(E_Hwc_Window_Queue *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