jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=147ef4f91deb99d44c67cbb37fa737d42d8a1792
commit 147ef4f91deb99d44c67cbb37fa737d42d8a1792 Author: Jean-Philippe Andre <jp.an...@samsung.com> Date: Mon Dec 18 19:04:56 2017 +0900 ecore: Avoid access to invalid eo id Not a fan of the solution, as I think some of the logic handling those futures is a bit broken. I'm not 100% sure about this patch. But this improves make check with CK_FORK=no in elm_suite. --- src/lib/ecore/ecore_events.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/lib/ecore/ecore_events.c b/src/lib/ecore/ecore_events.c index 49cacd1f07..3adbe042ea 100644 --- a/src/lib/ecore/ecore_events.c +++ b/src/lib/ecore/ecore_events.c @@ -71,10 +71,22 @@ ecore_event_add(int type, return (Ecore_Event *)msg; } +static void +_event_del_cb(void *data, const Efl_Event *ev) +{ + Ecore_Future_Schedule_Entry *entry = data; + if ((ev->object == (Eo *) entry->event) && entry->future) + { + eina_future_cancel(entry->future); + eina_value_flush(&entry->value); + } +} + EAPI void * ecore_event_del(Ecore_Event *event) { void *data = NULL; + if (!event) return data; ecore_event_message_data_get((Eo *)event, NULL, &data, NULL, NULL); _efl_loop_message_unsend((Eo *)event); return data; @@ -141,8 +153,9 @@ ecore_future_free(void *user_data, void *func_data EINA_UNUSED) static Eina_Future_Schedule_Entry * ecore_future_schedule(Eina_Future_Scheduler *sched, Eina_Future_Scheduler_Cb cb, Eina_Future *future, Eina_Value value) { - Ecore_Future_Schedule_Entry *entry = eina_mempool_malloc(mp_future_schedule_entry, - sizeof(Ecore_Future_Schedule_Entry)); + Ecore_Future_Schedule_Entry *entry; + + entry = eina_mempool_malloc(mp_future_schedule_entry, sizeof(*entry)); EINA_SAFETY_ON_NULL_RETURN_VAL(entry, NULL); entry->base.scheduler = sched; entry->cb = cb; @@ -150,6 +163,7 @@ ecore_future_schedule(Eina_Future_Scheduler *sched, Eina_Future_Scheduler_Cb cb, entry->value = value; entry->event = ecore_event_add(ECORE_EV_FUTURE_ID, entry, ecore_future_free, entry); EINA_SAFETY_ON_NULL_GOTO(entry->event, err); + efl_event_callback_add((Eo *) entry->event, EFL_EVENT_DEL, _event_del_cb, entry); return &entry->base; err: --