From: mike_m Date: Thu, 11 Aug 2011 10:59:48 +0000 (+0000) Subject: ecore: Create callback wrappers X-Git-Tag: build/2012-07-04.173327~937 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8b50a88a985464701cc0d6663602e670d052f3ca;p=profile%2Fivi%2Fecore.git ecore: Create callback wrappers This gets rid of a lot of temporary variables and cleans the code up again... Signed-off-by: Mike McCormack git-svn-id: http://svn.enlightenment.org/svn/e/trunk/ecore@62342 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/ecore/ecore_anim.c b/src/lib/ecore/ecore_anim.c index e795b46..27efa13 100644 --- a/src/lib/ecore/ecore_anim.c +++ b/src/lib/ecore/ecore_anim.c @@ -99,17 +99,7 @@ _do_tick(void) { if (!animator->delete_me && !animator->suspended) { - Ecore_Task_Cb func; - void *data; - Eina_Bool ret; - - func = animator->func; - data = animator->data; - _ecore_unlock(); - ret = func(data); - _ecore_lock(); - - if (!ret) + if (!_ecore_call_task_cb(animator->func, animator->data)) { animator->delete_me = EINA_TRUE; animators_delete_me++; diff --git a/src/lib/ecore/ecore_events.c b/src/lib/ecore/ecore_events.c index a982d72..9c05122 100644 --- a/src/lib/ecore/ecore_events.c +++ b/src/lib/ecore/ecore_events.c @@ -516,20 +516,7 @@ _ecore_event_del(Ecore_Event *event) void *data; data = event->data; - if (event->func_free) - { - Ecore_End_Cb func_free; - void *ev; - void *data; - - func_free = event->func_free; - ev = event->event; - data = event->data; - - _ecore_unlock(); - func_free(data, ev); - _ecore_lock(); - } + if (event->func_free) _ecore_call_end_cb(event->func_free, event->data, event->event); events = (Ecore_Event *) eina_inlist_remove(EINA_INLIST_GET(events), EINA_INLIST_GET(event)); ECORE_MAGIC_SET(event, ECORE_MAGIC_NONE); free(event); @@ -583,18 +570,7 @@ _ecore_event_filters_apply() ef->references++; if (ef->func_start) - { - Ecore_Data_Cb func_start; - void *data; - void *r; - - func_start = ef->func_start; - data = ef->data; - _ecore_unlock(); - r = func_start(data); - _ecore_lock(); - ef->loop_data = r; - } + ef->loop_data = _ecore_call_data_cb(ef->func_start, ef->data); if (!event_filter_event_current) { @@ -610,23 +586,9 @@ _ecore_event_filters_apply() while (event_filter_event_current) { Ecore_Event *e = event_filter_event_current; - Ecore_Filter_Cb func_filter; - void *loop_data; - void *data; - int type; - void *event; - Eina_Bool r; - - func_filter = ef->func_filter; - data = ef->data; - loop_data = ef->loop_data; - type = e->type; - event = e->event; - - _ecore_unlock(); - r = func_filter(data, loop_data, type, event); - _ecore_lock(); - if (!r) + + if (!_ecore_call_filter_cb(ef->func_filter, ef->data, + ef->loop_data, e->type, e->event)) { ecore_event_del(e); } @@ -635,19 +597,7 @@ _ecore_event_filters_apply() event_filter_event_current = (Ecore_Event *)EINA_INLIST_GET(event_filter_event_current)->next; } if (ef->func_end) - { - Ecore_End_Cb func_end; - void *loop_data; - void *data; - - func_end = ef->func_end; - data = ef->data; - loop_data = ef->loop_data; - - _ecore_unlock(); - ef->func_end(ef->data, ef->loop_data); - _ecore_lock(); - } + _ecore_call_end_cb(ef->func_end, ef->data, ef->loop_data); ef->references--; } @@ -727,22 +677,12 @@ _ecore_event_call(void) eh = event_handler_current; if (!eh->delete_me) { - Ecore_Event_Handler_Cb func; - void *data; - int type; - void *event; Eina_Bool ret; handle_count++; - func = eh->func; - data = eh->data; - type = e->type; - event = e->event; eh->references++; - _ecore_unlock(); - ret = func(data, type, event); - _ecore_lock(); + ret = _ecore_call_handler_cb(eh->func, eh->data, e->type, e->event); eh->references--; if (!ret) diff --git a/src/lib/ecore/ecore_idle_enterer.c b/src/lib/ecore/ecore_idle_enterer.c index aa0b4a6..bfbd065 100644 --- a/src/lib/ecore/ecore_idle_enterer.c +++ b/src/lib/ecore/ecore_idle_enterer.c @@ -161,17 +161,8 @@ _ecore_idle_enterer_call(void) Ecore_Idle_Enterer *ie = (Ecore_Idle_Enterer *)idle_enterer_current; if (!ie->delete_me) { - Ecore_Task_Cb func; - void *data; - Eina_Bool ret; - - func = ie->func; - data = ie->data; ie->references++; - _ecore_unlock(); - ret = func(data); - _ecore_lock(); - if (!ret) + if (!_ecore_call_task_cb(ie->func, ie->data)) { if (!ie->delete_me) _ecore_idle_enterer_del(ie); } diff --git a/src/lib/ecore/ecore_idle_exiter.c b/src/lib/ecore/ecore_idle_exiter.c index fc41f92..af068d8 100644 --- a/src/lib/ecore/ecore_idle_exiter.c +++ b/src/lib/ecore/ecore_idle_exiter.c @@ -129,17 +129,8 @@ _ecore_idle_exiter_call(void) Ecore_Idle_Exiter *ie = (Ecore_Idle_Exiter *)idle_exiter_current; if (!ie->delete_me) { - Ecore_Task_Cb func; - void *data; - Eina_Bool ret; - - func = ie->func; - data = ie->data; ie->references++; - _ecore_unlock(); - ret = func(data); - _ecore_lock(); - if (!ret) + if (!_ecore_call_task_cb(ie->func, ie->data)) { if (!ie->delete_me) _ecore_idle_exiter_del(ie); } diff --git a/src/lib/ecore/ecore_idler.c b/src/lib/ecore/ecore_idler.c index f39999f..74da368 100644 --- a/src/lib/ecore/ecore_idler.c +++ b/src/lib/ecore/ecore_idler.c @@ -113,17 +113,8 @@ _ecore_idler_call(void) Ecore_Idler *ie = (Ecore_Idler *)idler_current; if (!ie->delete_me) { - Eina_Bool ret; - Ecore_Task_Cb func; - void *data; - - func = ie->func; - data = ie->data; ie->references++; - _ecore_unlock(); - ret = func(data); - _ecore_lock(); - if (!ret) + if (!_ecore_call_task_cb(ie->func, ie->data)) { if (!ie->delete_me) _ecore_idler_del(ie); } diff --git a/src/lib/ecore/ecore_main.c b/src/lib/ecore/ecore_main.c index edce31d..5653726 100644 --- a/src/lib/ecore/ecore_main.c +++ b/src/lib/ecore/ecore_main.c @@ -1255,15 +1255,8 @@ _ecore_main_prepare_handlers(void) } if (!fdh->delete_me && fdh->prep_func) { - Ecore_Fd_Prep_Cb prep_func; - void *prep_data; - - prep_func = fdh->prep_func; - prep_data = fdh->prep_data; fdh->references++; - _ecore_unlock(); - prep_func(prep_data, fdh); - _ecore_lock(); + _ecore_call_prep_cb(fdh->prep_func, fdh->prep_data, fdh); fdh->references--; } else @@ -1413,13 +1406,9 @@ _ecore_main_fd_handlers_bads_rem(void) ERR("Found bad fd at index %d", fdh->fd); if (fdh->flags & ECORE_FD_ERROR) { - Eina_Bool ret; ERR("Fd set for error! calling user"); fdh->references++; - _ecore_unlock(); - ret = fdh->func(fdh->data, fdh); - _ecore_lock(); - if (!ret) + if (!_ecore_call_fd_cb(fdh->func, fdh->data, fdh)) { ERR("Fd function err returned 0, remove it"); if (!fdh->delete_me) @@ -1539,12 +1528,8 @@ _ecore_main_fd_handlers_call(void) (fdh->write_active) || (fdh->error_active)) { - Eina_Bool ret; fdh->references++; - _ecore_unlock(); - ret = fdh->func(fdh->data, fdh); - _ecore_lock(); - if (!ret) + if (!_ecore_call_fd_cb(fdh->func, fdh->data, fdh)) { if (!fdh->delete_me) { @@ -1592,27 +1577,10 @@ _ecore_main_fd_handlers_buf_call(void) } if ((!fdh->delete_me) && fdh->buf_func) { - Ecore_Fd_Cb buf_func; - void *buf_data; - Eina_Bool r; - - /* copy data before releasing lock */ - buf_func = fdh->buf_func; - buf_data = fdh->buf_data; fdh->references++; - _ecore_unlock(); - r = buf_func(buf_data, fdh); - _ecore_lock(); - if (r) + if (_ecore_call_fd_cb(fdh->buf_func, fdh->buf_data, fdh)) { - Ecore_Fd_Cb func; - void *data; - - func = fdh->func; - data = fdh->data; - _ecore_unlock(); - ret |= func(data, fdh); - _ecore_lock(); + ret |= _ecore_call_fd_cb(fdh->func, fdh->data, fdh); fdh->read_active = EINA_TRUE; _ecore_try_add_to_call_list(fdh); } diff --git a/src/lib/ecore/ecore_private.h b/src/lib/ecore/ecore_private.h index ae02c1e..10a4f49 100644 --- a/src/lib/ecore/ecore_private.h +++ b/src/lib/ecore/ecore_private.h @@ -203,17 +203,99 @@ void _ecore_throttle(void); void _ecore_lock(void); void _ecore_unlock(void); #else -static inline void _ecore_lock(void) - { - /* at least check we're not being called from a thread */ - EINA_MAIN_LOOP_CHECK_RETURN; - } - -static inline void _ecore_unlock(void) - { - } +static inline void +_ecore_lock(void) +{ + /* at least check we're not being called from a thread */ + EINA_MAIN_LOOP_CHECK_RETURN; +} + +static inline void +_ecore_unlock(void) +{ +} #endif +/* + * Callback wrappers all assume that ecore _ecore_lock has been called + */ +static inline Eina_Bool +_ecore_call_task_cb(Ecore_Task_Cb func, void *data) +{ + Eina_Bool r; + + _ecore_unlock(); + r = func(data); + _ecore_lock(); + + return r; +} + +static inline void * +_ecore_call_data_cb(Ecore_Data_Cb func, void *data) +{ + void *r; + + _ecore_unlock(); + r = func(data); + _ecore_lock(); + + return r; +} + +static inline void +_ecore_call_end_cb(Ecore_End_Cb func, void *user_data, void *func_data) +{ + _ecore_unlock(); + func(user_data, func_data); + _ecore_lock(); +} + +static inline Eina_Bool +_ecore_call_filter_cb(Ecore_Filter_Cb func, void *data, + void *loop_data, int type, void *event) +{ + Eina_Bool r; + + _ecore_unlock(); + r = func(data, loop_data, type, event); + _ecore_lock(); + + return r; +} + +static inline Eina_Bool +_ecore_call_handler_cb(Ecore_Event_Handler_Cb func, void *data, int type, void *event) +{ + Eina_Bool r; + + _ecore_unlock(); + r = func(data, type, event); + _ecore_lock(); + + return r; +} + +static inline void +_ecore_call_prep_cb(Ecore_Fd_Prep_Cb func, void *data, Ecore_Fd_Handler *fd_handler) +{ + _ecore_unlock(); + func(data, fd_handler); + _ecore_lock(); +} + +static inline Eina_Bool +_ecore_call_fd_cb(Ecore_Fd_Cb func, void *data, Ecore_Fd_Handler *fd_handler) +{ + Eina_Bool r; + + _ecore_unlock(); + r = func(data, fd_handler); + _ecore_lock(); + + return r; +} + extern int _ecore_fps_debug; extern double _ecore_time_loop_time; extern Eina_Bool _ecore_glib_always_integrate; diff --git a/src/lib/ecore/ecore_timer.c b/src/lib/ecore/ecore_timer.c index 9aee32f..7085d3e 100644 --- a/src/lib/ecore/ecore_timer.c +++ b/src/lib/ecore/ecore_timer.c @@ -706,9 +706,6 @@ _ecore_timer_call(double when) while (timer_current) { Ecore_Timer *timer = timer_current; - Eina_Bool cont; - Ecore_Task_Cb func; - void *data; if (timer->at > when) { @@ -723,12 +720,7 @@ _ecore_timer_call(double when) } timer->references++; - func = timer->func; - data = timer->data; - _ecore_unlock(); - cont = func(data); - _ecore_lock(); - if (!cont) + if (!_ecore_call_task_cb(timer->func, timer->data)) { if (!timer->delete_me) _ecore_timer_del(timer); }