diff --git a/src/lib/eina/eina_promise.c b/src/lib/eina/eina_promise.c index 649b6e97b0..7e7617ceb7 100644 --- a/src/lib/eina/eina_promise.c +++ b/src/lib/eina/eina_promise.c @@ -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); diff --git a/src/lib/eina/eina_promise.h b/src/lib/eina/eina_promise.h index 44e9aef655..41778c54a6 100644 --- a/src/lib/eina/eina_promise.h +++ b/src/lib/eina/eina_promise.h @@ -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); /** * @} diff --git a/src/lib/eo/efl_future.c b/src/lib/eo/efl_future.c index aaa1d88a51..8f19a34e11 100644 --- a/src/lib/eo/efl_future.c +++ b/src/lib/eo/efl_future.c @@ -52,5 +52,6 @@ efl_future_init(void) Eina_Bool efl_future_shutdown(void) { + __eina_promise_cancel_all(); return EINA_TRUE; }