cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=deb6f0d2cd33b14932a9b7dd05e4b6ddea5a3318

commit deb6f0d2cd33b14932a9b7dd05e4b6ddea5a3318
Author: Cedric BAIL <ced...@osg.samsung.com>
Date:   Thu Mar 9 16:10:00 2017 -0800

    ecore_con: avoid potential crash during shutdown due to Ecore_Event queue.
---
 src/lib/ecore_con/ecore_con_legacy.c | 14 ++++++++++++++
 src/lib/ecore_con/ecore_con_url.c    |  5 +++++
 2 files changed, 19 insertions(+)

diff --git a/src/lib/ecore_con/ecore_con_legacy.c 
b/src/lib/ecore_con/ecore_con_legacy.c
index bfff6d9..47c436b 100644
--- a/src/lib/ecore_con/ecore_con_legacy.c
+++ b/src/lib/ecore_con/ecore_con_legacy.c
@@ -218,6 +218,20 @@ ecore_con_legacy_shutdown(void)
    EINA_LIST_FREE(_ecore_con_lookups, lookup_ctx)
      ecore_thread_cancel(lookup_ctx->thread);
 
+   ecore_event_type_flush(ECORE_CON_EVENT_CLIENT_ADD,
+                          ECORE_CON_EVENT_CLIENT_DEL,
+                          ECORE_CON_EVENT_SERVER_ADD,
+                          ECORE_CON_EVENT_SERVER_DEL,
+                          ECORE_CON_EVENT_CLIENT_DATA,
+                          ECORE_CON_EVENT_SERVER_DATA,
+                          ECORE_CON_EVENT_CLIENT_WRITE,
+                          ECORE_CON_EVENT_SERVER_WRITE,
+                          ECORE_CON_EVENT_CLIENT_ERROR,
+                          ECORE_CON_EVENT_SERVER_ERROR,
+                          ECORE_CON_EVENT_PROXY_BIND,
+                          ECORE_CON_EVENT_SERVER_UPGRADE,
+                          ECORE_CON_EVENT_CLIENT_UPGRADE);
+
    ecore_con_socks_shutdown();
    if (!_ecore_con_event_count) ecore_con_mempool_shutdown();
    else WRN("%d events still exist, leaking ecore_con mempools", 
_ecore_con_event_count);
diff --git a/src/lib/ecore_con/ecore_con_url.c 
b/src/lib/ecore_con/ecore_con_url.c
index 557e2c8..8c03176 100644
--- a/src/lib/ecore_con/ecore_con_url.c
+++ b/src/lib/ecore_con/ecore_con_url.c
@@ -73,6 +73,11 @@ ecore_con_url_shutdown(void)
    if (_init_count) return _init_count;
    EINA_LIST_FREE(_url_con_url_list, url_con_url)
      ecore_con_url_free(url_con_url);
+
+   ecore_event_type_flush(ECORE_CON_EVENT_URL_DATA,
+                          ECORE_CON_EVENT_URL_COMPLETE,
+                          ECORE_CON_EVENT_URL_PROGRESS);
+
    _c_shutdown();
    emile_shutdown(); /* no emile_cipher_shutdown(), handled here */
    ecore_con_shutdown();

-- 


Reply via email to