ecore: forcefully flush pending event when ecore_shutdown is called.

If a component emit Ecore_Event and they aren't processed before the
call it call ecore_shutdown, there is no way to prevent this event
from being triggered after the component at shutdown itself. Which
may well lead to a use after free case. As we don't know which event
are pending and we also are not shuting down ecore completely as they
are still other component using it, we can only flush all pending event
right away.
This commit is contained in:
Cedric BAIL 2017-02-27 15:01:34 -08:00
parent 30c5225bec
commit 2c6808e4ee
2 changed files with 7 additions and 1 deletions

View File

@ -354,6 +354,13 @@ ecore_shutdown(void)
ERR("Init count not greater than 0 in shutdown.");
return 0;
}
// We need to flush all pending event as this is
// the only way to properly avoid use after free
// during shutdown of component that may have
// emitted and still pending event.
_ecore_event_call();
if (_ecore_init_count-- != _ecore_init_count_threshold)
goto end;

View File

@ -605,4 +605,3 @@ _ecore_event_signal_realtime_new(void)
{
return calloc(1, sizeof(Ecore_Event_Signal_Realtime));
}