use a safe iterator when deleting clients during comp shutdown

it's conceivable that, were there a bug in client refcounting,
this could become an infinite loop and prevent shutdown/restart.
since, at this point, we don't really care about deleting anything,
ensure that the loop will end
This commit is contained in:
Mike Blumenkrantz 2015-06-15 13:35:34 -04:00
parent 6b64e40122
commit fd4226eb8f
1 changed files with 6 additions and 3 deletions

View File

@ -1290,14 +1290,17 @@ e_comp_internal_save(void)
EINTERN int
e_comp_shutdown(void)
{
Eina_List *l, *ll;
E_Client *ec;
#ifdef HAVE_WAYLAND
E_Pixmap_Type type = e_comp->comp_type;
#endif
E_FREE_FUNC(action_timeout, ecore_timer_del);
while (e_comp->clients)
EINA_LIST_FOREACH_SAFE(e_comp->clients, l, ll, ec)
{
DELD(eina_list_data_get(e_comp->clients), 99999);
e_object_del(eina_list_data_get(e_comp->clients));
DELD(ec, 99999);
e_object_del(E_OBJECT(ec));
}
e_object_del(E_OBJECT(e_comp));
E_FREE_LIST(handlers, ecore_event_handler_del);