From 69a684cf0451fb24bb471e6ba6e32eca2727c49a Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Wed, 23 Nov 2016 14:56:44 +0900 Subject: [PATCH] evas: Fix a few issues after init/shutdown/init elm_suite would crash when CK_FORK=no is set, because evas was badly initializing or shutting down. Note that elm_suite still crashes with CK_FORK=no but valgrind doesn't complain. --- src/lib/evas/canvas/evas_async_events.c | 12 +++++++----- src/lib/evas/canvas/evas_main.c | 2 +- src/lib/evas/common/evas_thread_render.c | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/lib/evas/canvas/evas_async_events.c b/src/lib/evas/canvas/evas_async_events.c index cdec83ef27..7d11172dfc 100644 --- a/src/lib/evas/canvas/evas_async_events.c +++ b/src/lib/evas/canvas/evas_async_events.c @@ -98,8 +98,8 @@ evas_async_events_init(void) { int filedes[2]; - _init_evas_event++; - if (_init_evas_event > 1) return _init_evas_event; + if (_init_evas_event++) + return _init_evas_event; _fd_pid = getpid(); @@ -136,8 +136,8 @@ evas_async_events_init(void) int evas_async_events_shutdown(void) { - _init_evas_event--; - if (_init_evas_event > 0) return _init_evas_event; + if (--_init_evas_event) + return _init_evas_event; eina_condition_free(&_thread_cond); eina_lock_free(&_thread_mutex); @@ -145,9 +145,11 @@ evas_async_events_shutdown(void) eina_lock_free(&_thread_feedback_mutex); eina_spinlock_free(&_thread_id_lock); + free(async_queue_cache); + async_queue_cache = NULL; + eina_spinlock_free(&async_lock); eina_inarray_flush(&async_queue); - free(async_queue_cache); pipe_close(_fd_read); pipe_close(_fd_write); diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index d05d7541d5..48048cf047 100644 --- a/src/lib/evas/canvas/evas_main.c +++ b/src/lib/evas/canvas/evas_main.c @@ -160,7 +160,7 @@ evas_shutdown(void) evas_thread_shutdown(); _evas_preload_thread_shutdown(); evas_async_events_shutdown(); - evas_common_shutdown(); + //evas_common_shutdown(); evas_module_shutdown(); #ifdef BUILD_LOADER_EET diff --git a/src/lib/evas/common/evas_thread_render.c b/src/lib/evas/common/evas_thread_render.c index d2d8581240..03812b5128 100644 --- a/src/lib/evas/common/evas_thread_render.c +++ b/src/lib/evas/common/evas_thread_render.c @@ -226,8 +226,9 @@ timeout_shutdown: evas_thread_worker = 0; - eina_inarray_flush(&evas_thread_queue); free(evas_thread_queue_cache); + evas_thread_queue_cache = NULL; + eina_inarray_flush(&evas_thread_queue); eina_threads_shutdown();