From 25b0ab9ca78ec2898c88de753e0396657f238f89 Mon Sep 17 00:00:00 2001 From: Mike McCormack Date: Fri, 12 Aug 2011 05:21:58 +0000 Subject: [PATCH] ecore: Create a lockless ecore_animator_add() Signed-off-by: Mike McCormack SVN revision: 62373 --- legacy/ecore/src/lib/ecore/ecore_anim.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/legacy/ecore/src/lib/ecore/ecore_anim.c b/legacy/ecore/src/lib/ecore/ecore_anim.c index 27efa1389b..de5455a62b 100644 --- a/legacy/ecore/src/lib/ecore/ecore_anim.c +++ b/legacy/ecore/src/lib/ecore/ecore_anim.c @@ -133,22 +133,31 @@ _do_tick(void) return ECORE_CALLBACK_RENEW; } -EAPI Ecore_Animator * -ecore_animator_add(Ecore_Task_Cb func, const void *data) +static Ecore_Animator * +_ecore_animator_add(Ecore_Task_Cb func, const void *data) { Ecore_Animator *animator = NULL; - _ecore_lock(); - if (!func) goto unlock; + if (!func) return animator; animator = calloc(1, sizeof(Ecore_Animator)); - if (!animator) goto unlock; + if (!animator) return animator; ECORE_MAGIC_SET(animator, ECORE_MAGIC_ANIMATOR); animator->func = func; animator->data = (void *)data; animators = (Ecore_Animator *)eina_inlist_append(EINA_INLIST_GET(animators), EINA_INLIST_GET(animator)); _begin_tick(); -unlock: + return animator; +} + +EAPI Ecore_Animator * +ecore_animator_add(Ecore_Task_Cb func, const void *data) +{ + Ecore_Animator *animator; + + _ecore_lock(); + animator = _ecore_animator_add(func, data); _ecore_unlock(); + return animator; } @@ -159,7 +168,7 @@ ecore_animator_timeline_add(double runtime, Ecore_Timeline_Cb func, const void * _ecore_lock(); if (runtime <= 0.0) runtime = 0.0; - animator = ecore_animator_add(_ecore_animator_run, NULL); + animator = _ecore_animator_add(_ecore_animator_run, NULL); animator->data = animator; animator->run_func = func; animator->run_data = (void *)data;