Hey, I reverted this. The freeze state can change from within the callbacks so you have to test it every time.
-- Tom. On 09/11/15 14:01, Jérémy Zurcher wrote: > jeyzu pushed a commit to branch master. > > http://git.enlightenment.org/core/efl.git/commit/?id=4b116627c24a43248abf5a34a391241b1c0cf983 > > commit 4b116627c24a43248abf5a34a391241b1c0cf983 > Author: Jérémy Zurcher <jer...@asynk.ch> > Date: Mon Nov 9 15:03:03 2015 +0100 > > Eo: Optimise event callback call > > check if the event is frozen before walking the event list > --- > src/lib/eo/eo_base_class.c | 53 > ++++++++++++++++++++++------------------------ > 1 file changed, 25 insertions(+), 28 deletions(-) > > diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c > index f99ca37..daf7a9d 100644 > --- a/src/lib/eo/eo_base_class.c > +++ b/src/lib/eo/eo_base_class.c > @@ -671,48 +671,45 @@ _eo_base_event_callback_call(Eo *obj_id, Eo_Base_Data > *pd, > > pd->walking_list++; > > + if (!desc->unfreezable && (event_freeze_count || pd->event_freeze_count)) > + goto end; > + > for (cb = pd->callbacks; cb; cb = cb->next) > { > - if (!cb->delete_me) > + if (cb->delete_me) > + continue; > + > + if (cb->func_array) > { > - if (cb->func_array) > - { > - const Eo_Callback_Array_Item *it; > + const Eo_Callback_Array_Item *it; > > - for (it = cb->items.item_array; it->func; it++) > - { > - if (!_cb_desc_match(it->desc, desc)) > - continue; > - if (!it->desc->unfreezable && > - (event_freeze_count || pd->event_freeze_count)) > - continue; > - > - /* Abort callback calling if the func says so. */ > - if (!it->func((void *) cb->func_data, obj_id, desc, > - (void *) event_info)) > - { > - ret = EINA_FALSE; > - goto end; > - } > - } > - } > - else > + for (it = cb->items.item_array; it->func; it++) > { > - if (!_cb_desc_match(cb->items.item.desc, desc)) > - continue; > - if (!cb->items.item.desc->unfreezable && > - (event_freeze_count || pd->event_freeze_count)) > + if (!_cb_desc_match(it->desc, desc)) > continue; > > /* Abort callback calling if the func says so. */ > - if (!cb->items.item.func((void *) cb->func_data, obj_id, > desc, > - (void *) event_info)) > + if (!it->func((void *) cb->func_data, obj_id, desc, > + (void *) event_info)) > { > ret = EINA_FALSE; > goto end; > } > } > } > + else > + { > + if (!_cb_desc_match(cb->items.item.desc, desc)) > + continue; > + > + /* Abort callback calling if the func says so. */ > + if (!cb->items.item.func((void *) cb->func_data, obj_id, desc, > + (void *) event_info)) > + { > + ret = EINA_FALSE; > + goto end; > + } > + } > } > > end: > ------------------------------------------------------------------------------ Presto, an open source distributed SQL query engine for big data, initially developed by Facebook, enables you to easily query your data on Hadoop in a more interactive manner. Teradata is also now providing full enterprise support for Presto. Download a free open source copy now. http://pubads.g.doubleclick.net/gampad/clk?id=250295911&iu=/4140 _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel