ecore_evas: avoid crash during shutdown due to Ecore_Event queue.

This commit is contained in:
Cedric BAIL 2017-03-09 16:11:07 -08:00
parent 0e8a20a0a6
commit 0cd43b45d9
4 changed files with 33 additions and 5 deletions

View File

@ -573,8 +573,12 @@ ecore_evas_shutdown(void)
return _ecore_evas_init_count;
eina_log_timing(_ecore_evas_log_dom,
EINA_LOG_STATE_START,
EINA_LOG_STATE_SHUTDOWN);
EINA_LOG_STATE_START,
EINA_LOG_STATE_SHUTDOWN);
#ifdef BUILD_ECORE_EVAS_EWS
_ecore_evas_ews_events_flush();
#endif
while (ecore_evases) _ecore_evas_free(ecore_evases);
@ -590,7 +594,7 @@ ecore_evas_shutdown(void)
_ecore_evas_engine_shutdown();
if (_ecore_evas_async_events_fd)
ecore_main_fd_handler_del(_ecore_evas_async_events_fd);
ecore_fork_reset_callback_del(_ecore_evas_fork_cb, NULL);
eina_log_domain_unregister(_ecore_evas_log_dom);

View File

@ -705,6 +705,28 @@ _ecore_evas_ews_events_init(void)
ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE = ecore_event_type_new();
}
void
_ecore_evas_ews_events_flush(void)
{
ecore_event_type_flush(ECORE_EVAS_EWS_EVENT_MANAGER_CHANGE,
ECORE_EVAS_EWS_EVENT_ADD,
ECORE_EVAS_EWS_EVENT_DEL,
ECORE_EVAS_EWS_EVENT_RESIZE,
ECORE_EVAS_EWS_EVENT_MOVE,
ECORE_EVAS_EWS_EVENT_SHOW,
ECORE_EVAS_EWS_EVENT_HIDE,
ECORE_EVAS_EWS_EVENT_FOCUS,
ECORE_EVAS_EWS_EVENT_UNFOCUS,
ECORE_EVAS_EWS_EVENT_RAISE,
ECORE_EVAS_EWS_EVENT_LOWER,
ECORE_EVAS_EWS_EVENT_ACTIVATE,
ECORE_EVAS_EWS_EVENT_ICONIFIED_CHANGE,
ECORE_EVAS_EWS_EVENT_MAXIMIZED_CHANGE,
ECORE_EVAS_EWS_EVENT_LAYER_CHANGE,
ECORE_EVAS_EWS_EVENT_FULLSCREEN_CHANGE,
ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
}
static int
_ecore_evas_ews_init(void)
{

View File

@ -11,6 +11,7 @@ EAPI int ECORE_EVAS_EXTN_CLIENT_DEL = 0;
void
_ecore_evas_extn_init(void)
{
if (ECORE_EVAS_EXTN_CLIENT_ADD != 0) return ;
ECORE_EVAS_EXTN_CLIENT_ADD = ecore_event_type_new();
ECORE_EVAS_EXTN_CLIENT_DEL = ecore_event_type_new();
}
@ -18,6 +19,6 @@ _ecore_evas_extn_init(void)
void
_ecore_evas_extn_shutdown(void)
{
ECORE_EVAS_EXTN_CLIENT_ADD = 0;
ECORE_EVAS_EXTN_CLIENT_DEL = 0;
ecore_event_type_flush(ECORE_EVAS_EXTN_CLIENT_ADD,
ECORE_EVAS_EXTN_CLIENT_DEL);
}

View File

@ -443,6 +443,7 @@ EAPI void _ecore_evas_window_available_profiles_free(Ecore_Evas *ee);
#ifdef BUILD_ECORE_EVAS_EWS
void _ecore_evas_ews_events_init(void);
void _ecore_evas_ews_events_flush(void);
int _ecore_evas_ews_shutdown(void);
#endif