Hi Hermet,

I have an issue with that commit. In Tizen, I am almost sure it sigsegvs 
because of the change from list to inlist. In 
_translate_string_data_get, ts = NULL is done before the it->next of the 
loop. I say I am almost sure because gdb gives me a ts not NULL and 
sigsegvs on the line before, on the comparison that is false.

Can you check that, please?
By the way, if setting to NULL is used to exit and break too, do you 
know why we need the comparison? It is really weird for me. I supposed I 
missed something here.

Thank you
JackDanielZ, alias Daniel

On 07/17/2013 09:06 AM, ChunEon Park - Enlightenment Git wrote:
> hermet pushed a commit to branch master.
>
> commit 6c7b2afd9bb8767a2d90c48a3b7e68a650585d71
> Author: ChunEon Park <her...@hermet.pe.kr>
> Date:   Wed Jul 17 15:05:40 2013 +0900
>
>      elementary/widget - use eina_inlist in transate data to improve memory 
> access / allocations.
> ---
>   src/lib/elm_widget.c | 35 +++++++++++++++++++++--------------
>   src/lib/elm_widget.h |  4 ++--
>   2 files changed, 23 insertions(+), 16 deletions(-)
>
> diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c
> index f3d2fe9..370fb67 100644
> --- a/src/lib/elm_widget.c
> +++ b/src/lib/elm_widget.c
> @@ -40,6 +40,7 @@ struct _Elm_Event_Cb_Data
>   
>   struct _Elm_Translate_String_Data
>   {
> +   EINA_INLIST;
>      Eina_Stringshare *id;
>      Eina_Stringshare *domain;
>      Eina_Stringshare *string;
> @@ -305,11 +306,15 @@ _elm_widget_smart_del(Eo *obj, void *_pd, va_list *list 
> EINA_UNUSED)
>        }
>      sd->tooltips = eina_list_free(sd->tooltips); /* should be empty anyway */
>      sd->cursors = eina_list_free(sd->cursors); /* should be empty anyway */
> -   EINA_LIST_FREE(sd->translate_strings, ts)
> +   while (sd->translate_strings)
>        {
> +        ts = EINA_INLIST_CONTAINER_GET(sd->translate_strings,
> +                                       Elm_Translate_String_Data);
>           eina_stringshare_del(ts->id);
>           eina_stringshare_del(ts->domain);
>           eina_stringshare_del(ts->string);
> +        sd->translate_strings = eina_inlist_remove(sd->translate_strings,
> +                                                   sd->translate_strings);
>           free(ts);
>        }
>   
> @@ -3815,16 +3820,15 @@ 
> elm_widget_domain_translatable_part_text_set(Evas_Object *obj,
>   }
>   
>   static Elm_Translate_String_Data *
> -_translate_string_data_get(Eina_List *translate_strings, const char *part)
> +_translate_string_data_get(Eina_Inlist *translate_strings, const char *part)
>   {
>      Elm_Translate_String_Data *ts;
>      Eina_Stringshare *str;
> -   Eina_List *l;
>   
> -   if (eina_list_count(translate_strings) == 0) return NULL;
> +   if (!translate_strings) return NULL;
>   
>      str = eina_stringshare_add(part);
> -   EINA_LIST_FOREACH(translate_strings, l, ts)
> +   EINA_INLIST_FOREACH(translate_strings, ts)
>        {
>           if (ts->id == str) break;
>           else ts = NULL;
> @@ -3835,9 +3839,9 @@ _translate_string_data_get(Eina_List 
> *translate_strings, const char *part)
>   }
>   
>   static Elm_Translate_String_Data *
> -_part_text_translatable_set(Eina_List **translate_strings, const char *part, 
> Eina_Bool translatable, Eina_Bool preset)
> +_part_text_translatable_set(Eina_Inlist **translate_strings, const char 
> *part, Eina_Bool translatable, Eina_Bool preset)
>   {
> -   Eina_List *t;
> +   Eina_Inlist *t;
>      Elm_Translate_String_Data *ts;
>      t = *translate_strings;
>      ts = _translate_string_data_get(t, part);
> @@ -3850,7 +3854,7 @@ _part_text_translatable_set(Eina_List 
> **translate_strings, const char *part, Ein
>                if (!ts) return NULL;
>   
>                ts->id = eina_stringshare_add(part);
> -             t = eina_list_append(t, ts);
> +             t = eina_inlist_append(t, (Eina_Inlist*) ts);
>             }
>           if (preset) ts->preset = EINA_TRUE;
>        }
> @@ -3860,7 +3864,7 @@ _part_text_translatable_set(Eina_List 
> **translate_strings, const char *part, Ein
>        {
>           if (ts)
>             {
> -             t = eina_list_remove(t, ts);
> +             t = eina_inlist_remove(t, EINA_INLIST_GET(ts));
>                eina_stringshare_del(ts->id);
>                eina_stringshare_del(ts->domain);
>                eina_stringshare_del(ts->string);
> @@ -3979,7 +3983,7 @@ elm_widget_translate(Evas_Object *obj)
>   }
>   
>   static const char*
> -_part_text_translate(Eina_List *translate_strings,
> +_part_text_translate(Eina_Inlist *translate_strings,
>                        const char *part,
>                        const char *text)
>   {
> @@ -4035,7 +4039,7 @@ _elm_widget_translate(Eo *obj EINA_UNUSED, void *_pd 
> EINA_UNUSED, va_list *list
>   
>   #ifdef HAVE_GETTEXT
>      Elm_Translate_String_Data *ts;
> -   EINA_LIST_FOREACH(sd->translate_strings, l, ts)
> +   EINA_INLIST_FOREACH(sd->translate_strings, ts)
>        {
>           if (!ts->string) continue;
>           const char *s = dgettext(ts->domain, ts->string);
> @@ -4905,11 +4909,15 @@ _elm_widget_item_free(Elm_Widget_Item *item)
>           free(wisd);
>        }
>   
> -   EINA_LIST_FREE(item->translate_strings, ts)
> +   while (item->translate_strings)
>        {
> +        ts = EINA_INLIST_CONTAINER_GET(item->translate_strings,
> +                                       Elm_Translate_String_Data);
>           eina_stringshare_del(ts->id);
>           eina_stringshare_del(ts->domain);
>           eina_stringshare_del(ts->string);
> +        item->translate_strings = eina_inlist_remove(item->translate_strings,
> +                                                     
> item->translate_strings);
>           free(ts);
>        }
>   
> @@ -5747,8 +5755,7 @@ _elm_widget_item_translate(Elm_Widget_Item *item)
>   
>   #ifdef HAVE_GETTEXT
>      Elm_Translate_String_Data *ts;
> -   const Eina_List *l;
> -   EINA_LIST_FOREACH(item->translate_strings, l, ts)
> +   EINA_INLIST_FOREACH(item->translate_strings, ts)
>        {
>           if (!ts->string) continue;
>           const char *s = dgettext(ts->domain, ts->string);
> diff --git a/src/lib/elm_widget.h b/src/lib/elm_widget.h
> index 20bb47a..388b2db 100644
> --- a/src/lib/elm_widget.h
> +++ b/src/lib/elm_widget.h
> @@ -402,7 +402,7 @@ typedef struct _Elm_Widget_Smart_Data
>      int                           child_drag_x_locked;
>      int                           child_drag_y_locked;
>   
> -   Eina_List                    *translate_strings;
> +   Eina_Inlist                  *translate_strings;
>      Eina_List                    *focus_chain;
>      Eina_List                    *event_cb;
>   
> @@ -575,7 +575,7 @@ struct _Elm_Widget_Item
>      Evas_Object                   *access_obj;
>      const char                    *access_info;
>      Eina_List                     *access_order;
> -   Eina_List                     *translate_strings;
> +   Eina_Inlist                   *translate_strings;
>      Eina_List                     *signals;
>   
>      Eina_Bool                      disabled : 1;
>


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to