e utils - ensure the delays dialog array does not have refs to freed dia

This commit is contained in:
Carsten Haitzler 2021-09-05 19:25:24 +01:00
parent d12acf0d01
commit 47aaa31886
1 changed files with 10 additions and 7 deletions

View File

@ -748,10 +748,16 @@ _e_util_cb_delayed_del(void *data EINA_UNUSED)
} }
static void static void
_e_util_cb_delayed_cancel(void *data, void *obj EINA_UNUSED) _e_util_cb_delayed_cancel(void *data EINA_UNUSED, void *obj)
{ {
unsigned long c = (unsigned long)data; unsigned long c = eina_array_count_get(_delay_del_array);
if (_delay_del_array) eina_array_data_set(_delay_del_array, c, NULL); unsigned long i;
for (i = 0; i < c; i++)
{
if (eina_array_data_get(_delay_del_array, i) == obj)
eina_array_data_set(_delay_del_array, i, NULL);
}
} }
E_API void E_API void
@ -771,10 +777,7 @@ e_util_defer_object_del(E_Object *obj)
if (_delay_del_array) if (_delay_del_array)
{ {
if (eina_array_push(_delay_del_array, obj)) if (eina_array_push(_delay_del_array, obj))
{ e_object_delfn_add(obj, _e_util_cb_delayed_cancel, NULL);
unsigned long c = eina_array_count_get(_delay_del_array);
e_object_delfn_add(obj, _e_util_cb_delayed_cancel, (void *)c);
}
} }
} }
} }