jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=fed81234480b7ed5b4d414f2df18b49992809a35

commit fed81234480b7ed5b4d414f2df18b49992809a35
Author: Jean-Philippe Andre <[email protected]>
Date:   Fri Dec 15 19:09:02 2017 +0900

    ecore: Avoid double free with promises
---
 src/lib/ecore/ecore_main.c  |  3 +++
 src/lib/ecore/efl_promise.c | 14 ++++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/lib/ecore/ecore_main.c b/src/lib/ecore/ecore_main.c
index 3ef5a7a5e0..ab90919e5d 100644
--- a/src/lib/ecore/ecore_main.c
+++ b/src/lib/ecore/ecore_main.c
@@ -1574,6 +1574,9 @@ _ecore_main_content_clear(Efl_Loop_Data *pd)
    EINA_LIST_FREE(tmp, promise)
      ecore_loop_promise_fulfill(promise);
 
+   // FIXME
+   __eina_promise_cancel_all();
+
    while (pd->fd_handlers)
      {
         Ecore_Fd_Handler *fdh = pd->fd_handlers;
diff --git a/src/lib/ecore/efl_promise.c b/src/lib/ecore/efl_promise.c
index 17e95489c6..3e522b4564 100644
--- a/src/lib/ecore/efl_promise.c
+++ b/src/lib/ecore/efl_promise.c
@@ -824,8 +824,11 @@ _efl_promise_all_free(Efl_Promise_All *all)
    EINA_ARRAY_ITER_NEXT(&all->members, i, fa, iterator)
      {
         if (fa->d)
-          EINA_REFCOUNT_UNREF(fa->d)
-            _efl_promise_msg_free(fa->d);
+          {
+             EINA_REFCOUNT_UNREF(fa->d)
+               _efl_promise_msg_free(fa->d);
+             fa->d = NULL;
+          }
      }
    efl_del(all->promise);
    all->promise = NULL;
@@ -839,8 +842,11 @@ _efl_promise_all_die(void *data, const Efl_Event *ev 
EINA_UNUSED)
 
    while ((fa = eina_array_pop(&all->members)))
      {
-        EINA_REFCOUNT_UNREF(fa->d)
-          _efl_promise_msg_free(fa->d);
+        if (fa->d)
+          {
+             EINA_REFCOUNT_UNREF(fa->d)
+               _efl_promise_msg_free(fa->d);
+          }
         assert(fa->f == NULL);
         free(fa);
      }

-- 


Reply via email to