forked from enlightenment/efl
eo/eina: Add HACK to avoid calls to EO after shutdown
Efl.Future is an EO object which means even cancelling Efl.Future objects requires EO. So this should be done before shutting down EO, otherwise everything fails badly. I believe Efl.Future is going to disappear soon, but the problem will remain: if any promise/future uses EO or anything else outside of Eina (so, basically anything) then it needs to be canceled before shutting down the above layers. This is the same situation as with ecore events, for which we've introduced ecore_event_type_flush. Ping @cedric
This commit is contained in:
parent
9427862d40
commit
5dbfb7961f
|
@ -532,10 +532,17 @@ eina_promise_init(void)
|
|||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
__eina_promise_cancel_all(void)
|
||||
{
|
||||
while (_pending_futures)
|
||||
_eina_future_cancel(_pending_futures->data, ECANCELED);
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
eina_promise_shutdown(void)
|
||||
{
|
||||
while (_pending_futures) _eina_future_cancel(_pending_futures->data, ECANCELED);
|
||||
__eina_promise_cancel_all();
|
||||
eina_mempool_del(_future_mp);
|
||||
eina_mempool_del(_promise_mp);
|
||||
eina_log_domain_unregister(_promise_log_dom);
|
||||
|
|
|
@ -1736,6 +1736,14 @@ eina_future_race_array(Eina_Future *array[])
|
|||
*/
|
||||
#define eina_future_chain_easy(_prev, ...) eina_future_chain_easy_array(_prev, (Eina_Future_Cb_Easy_Desc[]) {__VA_ARGS__, {NULL, NULL, NULL, NULL, NULL}})
|
||||
|
||||
/**
|
||||
* @brief Cancels all pending promise/futures.
|
||||
*
|
||||
* Internal function. Do not use.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
EAPI void __eina_promise_cancel_all(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
|
|
@ -52,5 +52,6 @@ efl_future_init(void)
|
|||
Eina_Bool
|
||||
efl_future_shutdown(void)
|
||||
{
|
||||
__eina_promise_cancel_all();
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue