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

Reply via email to