On Fri, 29 Apr 2016 05:57:51 -0700 Tom Hacohen <[email protected]> said:

> tasn pushed a commit to branch master.
> 
> http://git.enlightenment.org/core/efl.git/commit/?id=9195d008dad901645bebfc83e240649c6b4c69e0
> 
> commit 9195d008dad901645bebfc83e240649c6b4c69e0
> Author: Tom Hacohen <[email protected]>
> Date:   Fri Apr 29 13:13:00 2016 +0100
> 
>     Eo keyed data: No need to register to see if a subobject was deleted.
>     
>     This is completely unnecessary. We are holding a reference to the
>     object, it can't get deleted under our feet.

WRONG.

  eo_key_obj_set(a, "key", b);
  eo_unref(b); // release last ref to b so the key is the only owner
  // ... some time later
  eo_del(eo_key_obj_get(a, "key"));

perfectly valid. i can unref/del an obj handle i fetched. it may be
unwise/incorrect, but i COULD have coe that does the above. yes i SHOULD do:

  eo_key_obj_del(a, "key");

instead but it CAN happen like above and the code was clearly written to be
robust for such cases. you have made code more fragile.

because of the other commits now i can't revert without a whole bunch of
conflicts. please don't make code more fragile. yes i know eoid makes the eo
handle robust, but there still is a CHANCE of it being a misdirect (be a valid
eoid pointing now to the wrong object when gen count is recycled AND the eoid
table entry is re-used and it happens to get gen count to match). the code
handled this case and would ensure there is NOT a clash. now it can happen thus
is more fragile.

> ---
>  src/lib/eo/eo_base_class.c | 50 ++++
> +----------------------------------------- 1 file changed, 5 insertions(+),
> 45 deletions(-)
> 
> diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c
> index 85ed41b..75967bf 100644
> --- a/src/lib/eo/eo_base_class.c
> +++ b/src/lib/eo/eo_base_class.c
> @@ -95,36 +95,8 @@ _eo_generic_data_node_free(Eo_Generic_Data_Node *node)
>     free(node);
>  }
>  
> -static Eina_Bool
> -_eo_base_cb_key_obj_del(void *data, const Eo_Event *event)
> -{
> -   Eo *parent_obj = data;
> -   Eo_Base_Data *pd = eo_data_scope_get(parent_obj, EO_BASE_CLASS);
> -
> -   if (pd)
> -     {
> -        Eo_Generic_Data_Node *node;
> -        Eo_Base_Extension *ext = pd->ext;
> -
> -        if (!ext) return EINA_TRUE;
> -        EINA_INLIST_FOREACH(ext->generic_data, node)
> -          {
> -             if ((node->d_type == DATA_OBJ) && (node->d.obj == event->obj))
> -               {
> -                  ext->generic_data = eina_inlist_remove
> -                    (ext->generic_data, EINA_INLIST_GET(node));
> -                  eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
> -                                        _eo_base_cb_key_obj_del, data);
> -                  _eo_generic_data_node_free(node);
> -                  break;
> -               }
> -          }
> -     }
> -   return EINA_TRUE;
> -}
> -
>  static void
> -_eo_generic_data_del_all(Eo *obj, Eo_Base_Data *pd)
> +_eo_generic_data_del_all(Eo *obj EINA_UNUSED, Eo_Base_Data *pd)
>  {
>     Eo_Generic_Data_Node *node;
>     Eo_Base_Extension *ext = pd->ext;
> @@ -137,8 +109,6 @@ _eo_generic_data_del_all(Eo *obj, Eo_Base_Data *pd)
>                                                 EINA_INLIST_GET(node));
>          if (node->d_type == DATA_OBJ)
>            {
> -             eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
> -                                   _eo_base_cb_key_obj_del, obj);
>               eo_unref(node->d.obj);
>            }
>          else if (node->d_type == DATA_VAL) eina_value_free(node->d.val);
> @@ -147,7 +117,7 @@ _eo_generic_data_del_all(Eo *obj, Eo_Base_Data *pd)
>  }
>  
>  EOLIAN static void
> -_eo_base_key_data_set(Eo *obj, Eo_Base_Data *pd, const char *key, const void
> *data) +_eo_base_key_data_set(Eo *obj EINA_UNUSED, Eo_Base_Data *pd, const
> char *key, const void *data) {
>     Eo_Generic_Data_Node *node;
>     Eo_Base_Extension *ext = pd->ext;
> @@ -165,8 +135,6 @@ _eo_base_key_data_set(Eo *obj, Eo_Base_Data *pd, const
> char *key, const void *da (ext->generic_data, EINA_INLIST_GET(node));
>                    if (node->d_type == DATA_OBJ)
>                      {
> -                       eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
> -                                             _eo_base_cb_key_obj_del, obj);
>                         eo_unref(node->d.obj);
>                      }
>                    else if (node->d_type == DATA_VAL) eina_value_free
> (node->d.val); @@ -220,7 +188,7 @@ _eo_base_key_data_get(const Eo *obj,
> Eo_Base_Data *pd, const char *key) }
>  
>  EOLIAN static void
> -_eo_base_key_del(Eo *obj, Eo_Base_Data *pd, const char *key)
> +_eo_base_key_del(Eo *obj EINA_UNUSED, Eo_Base_Data *pd, const char *key)
>  {
>     Eo_Generic_Data_Node *node;
>     Eo_Base_Extension *ext = pd->ext;
> @@ -235,8 +203,6 @@ _eo_base_key_del(Eo *obj, Eo_Base_Data *pd, const char
> *key) (ext->generic_data, EINA_INLIST_GET(node));
>               if (node->d_type == DATA_OBJ)
>                 {
> -                  eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
> -                                        _eo_base_cb_key_obj_del, obj);
>                    eo_unref(node->d.obj);
>                 }
>               else if (node->d_type == DATA_VAL) eina_value_free(node->d.val);
> @@ -247,7 +213,7 @@ _eo_base_key_del(Eo *obj, Eo_Base_Data *pd, const char
> *key) }
>  
>  EOLIAN static void
> -_eo_base_key_obj_set(Eo *obj, Eo_Base_Data *pd, const char *key, Eo *objdata)
> +_eo_base_key_obj_set(Eo *obj EINA_UNUSED, Eo_Base_Data *pd, const char *key,
> Eo *objdata) {
>     Eo_Generic_Data_Node *node;
>     Eo_Base_Extension *ext = pd->ext;
> @@ -264,8 +230,6 @@ _eo_base_key_obj_set(Eo *obj, Eo_Base_Data *pd, const
> char *key, Eo *objdata) (ext->generic_data, EINA_INLIST_GET(node));
>                    if (node->d_type == DATA_OBJ)
>                      {
> -                       eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
> -                                             _eo_base_cb_key_obj_del, obj);
>                         eo_unref(node->d.obj);
>                      }
>                    else if (node->d_type == DATA_VAL) eina_value_free
> (node->d.val); @@ -284,8 +248,6 @@ _eo_base_key_obj_set(Eo *obj, Eo_Base_Data
> *pd, const char *key, Eo *objdata) node->key = eina_stringshare_add(key);
>          node->d.obj = objdata;
>          node->d_type = DATA_OBJ;
> -        eo_event_callback_add(node->d.obj, EO_BASE_EVENT_DEL,
> -                              _eo_base_cb_key_obj_del, obj);
>          eo_ref(node->d.obj);
>          ext->generic_data = eina_inlist_prepend
>            (ext->generic_data, EINA_INLIST_GET(node));
> @@ -322,7 +284,7 @@ _eo_base_key_obj_get(const Eo *obj, Eo_Base_Data *pd,
> const char *key) }
>  
>  EOLIAN static void
> -_eo_base_key_value_set(Eo *obj, Eo_Base_Data *pd, const char *key,
> Eina_Value *value) +_eo_base_key_value_set(Eo *obj EINA_UNUSED, Eo_Base_Data
> *pd, const char *key, Eina_Value *value) {
>     Eo_Generic_Data_Node *node;
>     Eo_Base_Extension *ext = pd->ext;
> @@ -339,8 +301,6 @@ _eo_base_key_value_set(Eo *obj, Eo_Base_Data *pd, const
> char *key, Eina_Value *v (ext->generic_data, EINA_INLIST_GET(node));
>                    if (node->d_type == DATA_OBJ)
>                      {
> -                       eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
> -                                             _eo_base_cb_key_obj_del, obj);
>                         eo_unref(node->d.obj);
>                      }
>                    else if (node->d_type == DATA_VAL) eina_value_free
> (node->d.val);
> 
> -- 
> 
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    [email protected]


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to