From: Cedric BAIL Date: Fri, 10 Mar 2017 00:11:07 +0000 (-0800) Subject: ecore_evas: avoid crash during shutdown due to Ecore_Event queue. X-Git-Tag: upstream/1.20.0~1752 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0cd43b45d9fed2915dd8f91f57c003bd569b8160;p=platform%2Fupstream%2Fefl.git ecore_evas: avoid crash during shutdown due to Ecore_Event queue. --- diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c index 8b53aab..bca08a1 100644 --- a/src/lib/ecore_evas/ecore_evas.c +++ b/src/lib/ecore_evas/ecore_evas.c @@ -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); diff --git a/src/lib/ecore_evas/ecore_evas_ews.c b/src/lib/ecore_evas/ecore_evas_ews.c index 199c1d8..d67fa16 100644 --- a/src/lib/ecore_evas/ecore_evas_ews.c +++ b/src/lib/ecore_evas/ecore_evas_ews.c @@ -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) { diff --git a/src/lib/ecore_evas/ecore_evas_extn.c b/src/lib/ecore_evas/ecore_evas_extn.c index 8c3dee0..141bd78 100644 --- a/src/lib/ecore_evas/ecore_evas_extn.c +++ b/src/lib/ecore_evas/ecore_evas_extn.c @@ -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); } diff --git a/src/lib/ecore_evas/ecore_evas_private.h b/src/lib/ecore_evas/ecore_evas_private.h index aa1d795..7400503 100644 --- a/src/lib/ecore_evas/ecore_evas_private.h +++ b/src/lib/ecore_evas/ecore_evas_private.h @@ -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