edje: fix animation memory leak.
authorHermet Park <chuneon.park@samsung.com>
Tue, 26 May 2020 05:37:10 +0000 (14:37 +0900)
committerJongmin Lee <jm105.lee@samsung.com>
Tue, 26 May 2020 22:21:35 +0000 (07:21 +0900)
if object is destructed on canvas animation,
its internal resource is leaked.

Here simple fix brings stopping animation before deleting obj.

@fix

src/lib/edje/edje_load.c

index e7cfa7e..8a46da0 100644 (file)
@@ -1931,14 +1931,6 @@ _edje_file_del(Edje *ed, Eina_Bool reuse_ic)
                   //
                }
 
-             if (rp->object)
-               {
-                  _edje_callbacks_focus_del(rp->object, ed);
-                  _edje_callbacks_del(rp->object, ed);
-                  evas_object_del(rp->object);
-                  rp->object = NULL;
-               }
-
              if (rp->custom)
                {
                   // xxx: lua2
@@ -2009,7 +2001,10 @@ _edje_file_del(Edje *ed, Eina_Bool reuse_ic)
                       (rp->typedata.vector))
                {
                   if (rp->typedata.vector->anim)
-                    efl_del(rp->typedata.vector->anim);
+                    {
+                       efl_canvas_object_animation_stop(rp->object);
+                       efl_del(rp->typedata.vector->anim);
+                    }
                   if (rp->typedata.vector->lottie_virtual_file)
                     eina_file_close(rp->typedata.vector->lottie_virtual_file);
                   if (rp->typedata.vector->lottie_data)
@@ -2019,6 +2014,14 @@ _edje_file_del(Edje *ed, Eina_Bool reuse_ic)
                   rp->typedata.vector = NULL;
                }
 
+             if (rp->object)
+               {
+                  _edje_callbacks_focus_del(rp->object, ed);
+                  _edje_callbacks_del(rp->object, ed);
+                  evas_object_del(rp->object);
+                  rp->object = NULL;
+               }
+
              /* Cleanup optional part. */
              free(rp->drag);
              rp->drag = NULL;