diff --git a/src/lib/ecore/ecore_anim.c b/src/lib/ecore/ecore_anim.c index d15a2703ec..fb6501c308 100644 --- a/src/lib/ecore/ecore_anim.c +++ b/src/lib/ecore/ecore_anim.c @@ -110,6 +110,8 @@ static Eina_Spinlock tick_queue_lock; static int tick_queue_count = 0; static Eina_Bool tick_skip = EINA_FALSE; +extern volatile int exit_signal_received; + static void _tick_send(signed char val) { @@ -367,7 +369,7 @@ _timer_tick_notify(void *data EINA_UNUSED, Ecore_Thread *thread EINA_UNUSED, voi if ((!tick_skip) || (tick_queued == 1)) { ecore_loop_time_set(*t); - _do_tick(); + if (!exit_signal_received) _do_tick(); _ecore_animator_flush(); } pt = *t; @@ -935,7 +937,7 @@ ecore_animator_custom_tick(void) { EINA_MAIN_LOOP_CHECK_RETURN; if (src != ECORE_ANIMATOR_SOURCE_CUSTOM) return; - _do_tick(); + if (!exit_signal_received) _do_tick(); _ecore_animator_flush(); } diff --git a/src/lib/ecore/ecore_signal.c b/src/lib/ecore/ecore_signal.c index 9fd9a7d8b9..65b9179393 100644 --- a/src/lib/ecore/ecore_signal.c +++ b/src/lib/ecore/ecore_signal.c @@ -39,6 +39,8 @@ static Eo *sig_pipe_handler = NULL; static Eina_Spinlock sig_pid_lock; static Eina_List *sig_pid_info_list = NULL; +volatile int exit_signal_received = 0; + typedef struct _Signal_Data { int sig; @@ -171,6 +173,15 @@ _ecore_signal_callback(int sig, siginfo_t *si, void *foo EINA_UNUSED) } errno = err; } + switch (sig) + { + case SIGQUIT: + case SIGINT: + case SIGTERM: + exit_signal_received = 1; + break; + default: break; + } } static void @@ -302,6 +313,7 @@ _ecore_signal_shutdown(void) # endif pthread_sigmask(SIG_BLOCK, &newset, NULL); #endif + exit_signal_received = 0; } void