ecore_evas: Fix crash in async render
authorjiin.moon <jiin.moon@samsung.com>
Tue, 4 Aug 2015 02:49:04 +0000 (11:49 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Tue, 4 Aug 2015 02:59:24 +0000 (11:59 +0900)
Summary:
The root cause of the crash is freed memory.
The evas_object_image_data_set api called with extn buffer in _ipc_server_data.
But there is no inform to render when free this buffer.
@fix

Reviewers: Hermet, jpeg, jypark

Subscribers: stefan_schmidt, cedric

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

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
src/modules/ecore_evas/engines/extn/ecore_evas_extn.c

index 550166c..6dd16ba 100644 (file)
@@ -178,7 +178,12 @@ _ecore_evas_extn_free(Ecore_Evas *ee)
         Ecore_Event_Handler *hdl;
         Ipc_Data_Update *ipc;
         int i;
-
+        if (bdata->image)
+          {
+             evas_object_image_data_set(bdata->image, NULL);
+             evas_object_image_pixels_dirty_set(bdata->image, EINA_TRUE);
+          }
+        bdata->pixels = NULL;
         for (i = 0; i < NBUF; i++)
           {
              if (extn->b[i].buf) _extnbuf_free(extn->b[i].buf);
@@ -229,7 +234,7 @@ _ecore_evas_extn_free(Ecore_Evas *ee)
              ee2->sub_ecore_evas = eina_list_remove(ee2->sub_ecore_evas, ee);
           }
         evas_object_del(bdata->image);
-               bdata->image = NULL;
+        bdata->image = NULL;
      }
    free(bdata);
    ee->engine.data = NULL;