evas_main: Fix memory leak.
authorWoochanlee <wc0917.lee@samsung.com>
Thu, 17 Sep 2020 08:23:10 +0000 (17:23 +0900)
committerWoochanlee <wc0917.lee@samsung.com>
Thu, 17 Sep 2020 08:33:13 +0000 (17:33 +0900)
Summary: If the inlist has only one item when it removed. the data is not freed in descturctor.

Reviewers: Hermet, raster, vtorri

Reviewed By: Hermet

Subscribers: vtorri, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12147

src/lib/evas/canvas/evas_main.c

index e26ca4d..0b657f9 100644 (file)
@@ -1532,8 +1532,11 @@ _evas_pointer_data_remove(Evas_Public_Data *edata, Evas_Device *pointer, Eina_Bo
         EINA_INLIST_FOREACH(pseat->pointers, pdata)
           if (pdata->pointer == pointer)
             {
-               pseat->pointers = eina_inlist_remove(pseat->pointers, EINA_INLIST_GET(pdata));
-               if (!nofree) free(pdata);
+               if (!nofree)
+                 {
+                    pseat->pointers = eina_inlist_remove(pseat->pointers, EINA_INLIST_GET(pdata));
+                    free(pdata);
+                 }
                hit = pseat;
                break;
             }
@@ -1541,8 +1544,11 @@ _evas_pointer_data_remove(Evas_Public_Data *edata, Evas_Device *pointer, Eina_Bo
    EINA_SAFETY_ON_NULL_RETURN(hit);
    if (hit->pointers) return;
    hit->object.in = eina_list_free(hit->object.in);
-   edata->seats = eina_inlist_remove(edata->seats, EINA_INLIST_GET(hit));
-   if (!nofree) free(hit);
+   if (!nofree)
+     {
+        edata->seats = eina_inlist_remove(edata->seats, EINA_INLIST_GET(hit));
+        free(hit);
+     }
 }
 
 Eina_List *