cedric pushed a commit to branch master.

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

commit c61ac48f1a3647a3010392d44781388fcae6a2a2
Author: Guilherme Iscaro <[email protected]>
Date:   Wed Aug 2 16:47:11 2017 -0300

    Efl_Copier: Add efl_wref_del() for pd->job.
    
    In order to perform IO operations the copier will create futures using
    efl_future_use(&pd->job, ...), which will set pd->job to NULL once the
    future is destroyed. However this may lead to problems, because in some
    cases the copier may be deleted at the _efl_io_copier_job() function,
    which is the future's callback. Since the copier may be deleted before
    the future, the area pointed by pd->job will have disappeared by the time 
the future
    tries to set pd->job to NULL. To avoid this problem the copier must
    explicily call efl_wref_del().
    
    Signed-off-by: Cedric BAIL <[email protected]>
---
 src/lib/ecore/efl_io_copier.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/lib/ecore/efl_io_copier.c b/src/lib/ecore/efl_io_copier.c
index c43ca0c3b6..0f744d6eb4 100644
--- a/src/lib/ecore/efl_io_copier.c
+++ b/src/lib/ecore/efl_io_copier.c
@@ -100,6 +100,8 @@ _efl_io_copier_job(void *data, const Efl_Event *ev 
EINA_UNUSED)
    uint64_t old_total = pd->progress.total;
 
    _COPIER_DBG(o, pd);
+   /* FIXME: Remove this wref once efl_promise is able to handle recursive 
cases. */
+   efl_wref_del(pd->job, &pd->job);
    pd->job = NULL; /* XXX TODO this should be NULL-ified by efl_promise before 
calling this function */
 
    efl_ref(o);

-- 


Reply via email to