e_hwc_window: fixed resource leak for new tbm buffer 92/230592/1
authorGwanglim Lee <gl77.lee@samsung.com>
Mon, 13 Apr 2020 02:52:15 +0000 (11:52 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Mon, 13 Apr 2020 02:52:15 +0000 (11:52 +0900)
Change-Id: I128aac98f41158e5b574dec98b72e01d98abcf4d

src/bin/e_hwc_window.c

index 6262005313769de11a88aa4e86bab24d2f475d6b..5aba4a5ca40de0f27ecc9a700031729add0ea235 100644 (file)
@@ -1949,6 +1949,7 @@ _e_hwc_window_client_recover(E_Hwc_Window *hwc_window)
    E_Comp_Wl_Buffer *comp_wl_buffer;
    tbm_surface_h tsurface =NULL;
    E_Client *ec = NULL;
+   Eina_Bool new_buffer = EINA_FALSE;
 
    if (hwc_window->is_deleted) return EINA_FALSE;
 
@@ -1970,6 +1971,7 @@ _e_hwc_window_client_recover(E_Hwc_Window *hwc_window)
 
         recover_buffer = e_comp_wl_tbm_buffer_get(tsurface);
         EINA_SAFETY_ON_NULL_RETURN_VAL(recover_buffer, EINA_FALSE);
+        new_buffer = EINA_TRUE;
      }
    else
      recover_buffer = comp_wl_buffer;
@@ -1981,6 +1983,12 @@ _e_hwc_window_client_recover(E_Hwc_Window *hwc_window)
    /* force update */
    if (ec->comp_data)
      e_comp_wl_surface_attach(ec, recover_buffer);
+   else
+     {
+        /* to avoid resource leak */
+        if (new_buffer)
+          e_comp_wl_tbm_buffer_destroy(recover_buffer);
+     }
 
    e_hwc_window_buffer_fetch(hwc_window);