OK,will do that tomorrow.that is going to break the API and ABI of cow
free.

Cedric Bail
On Nov 3, 2013 11:14 PM, "Carsten Haitzler" <ras...@rasterman.com> wrote:
>
> On Sun, 3 Nov 2013 15:00:01 +0100 Cedric BAIL <moa.blueb...@gmail.com>
said:
>
> > Cedric Bail
> > On Nov 3, 2013 9:22 PM, "Carsten Haitzler" <ras...@rasterman.com> wrote:
> > >
> > > raster pushed a commit to branch master.
> > >
> > >
> >
http://git.enlightenment.org/core/efl.git/commit/?id=eb6af1f1ff7ee069eff8bab13c0eed5010ef5660
> > >
> > > commit eb6af1f1ff7ee069eff8bab13c0eed5010ef5660
> > > Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
> > > Date:   Sun Nov 3 21:43:11 2013 +0900
> > >
> > >     evas - clip shutdown fix to avoid invalid mem accesses
> > >
> > >     many valgrind complaints on e shutdown are there regarding
accessing
> > >     cow sections, lists and object elements during shutdown. this
plugs
> > >     theses little holes to avoid the invalid accesses and thus avoids
> > >     potential crashes.
> >
> > Just thinking here, but we could make cow free set the pointer to the
> > read-only always valid object? That should keep the code cleaner and
less
> > error prone, I think.
>
> whatever it takes to ensure we don't have crashes lurking. :)
>
> > > ---
> > >  src/lib/evas/canvas/evas_clip.c        | 20 ++++++++++++--------
> > >  src/lib/evas/canvas/evas_object_main.c | 25 ++++++++++++++++++++++---
> > >  2 files changed, 34 insertions(+), 11 deletions(-)
> > >
> > > diff --git a/src/lib/evas/canvas/evas_clip.c
> > b/src/lib/evas/canvas/evas_clip.c
> > > index 76cddc0..5dfbc48 100644
> > > --- a/src/lib/evas/canvas/evas_clip.c
> > > +++ b/src/lib/evas/canvas/evas_clip.c
> > > @@ -369,6 +369,7 @@ _clip_unset(Eo *eo_obj, void *_pd, va_list *list
> > EINA_UNUSED)
> > >  {
> > >     Evas_Object_Protected_Data *obj = _pd;
> > >
> > > +   if (!obj->cur) return;
> > >     if (!obj->cur->clipper) return;
> > >
> > >     obj->clip.cache_clipees_answer =
> > eina_list_free(obj->clip.cache_clipees_answer);
> > > @@ -386,7 +387,7 @@ _clip_unset(Eo *eo_obj, void *_pd, va_list *list
> > EINA_UNUSED)
> > >            {
> > >               EINA_COW_STATE_WRITE_BEGIN(obj->cur->clipper,
state_write,
> > cur)
> > >                 {
> > > -                  state_write->have_clipees = 0;
> > > +                  if (state_write) state_write->have_clipees = 0;
> > >                 }
> > >               EINA_COW_STATE_WRITE_END(obj->cur->clipper, state_write,
> > cur);
> > >
> > > @@ -417,14 +418,17 @@ _clip_unset(Eo *eo_obj, void *_pd, va_list *list
> > EINA_UNUSED)
> > >     if ((!obj->is_smart) &&
> > >         (!((obj->map->cur.map) && (obj->map->cur.usemap))))
> > >       {
> > > -        if (evas_object_is_in_output_rect(eo_obj, obj,
> > > +        if (obj->cur)
> > > +          {
> > > +             if (evas_object_is_in_output_rect(eo_obj, obj,
> > > +
> > obj->layer->evas->pointer.x,
> > > +
> > obj->layer->evas->pointer.y, 1, 1))
> > > +               evas_event_feed_mouse_move(obj->layer->evas->evas,
> > >
 obj->layer->evas->pointer.x,
> > > -
 obj->layer->evas->pointer.y,
> > 1, 1))
> > > -          evas_event_feed_mouse_move(obj->layer->evas->evas,
> > > -                                     obj->layer->evas->pointer.x,
> > > -                                     obj->layer->evas->pointer.y,
> > > -
obj->layer->evas->last_timestamp,
> > > -                                     NULL);
> > > +
 obj->layer->evas->pointer.y,
> > > +
> >  obj->layer->evas->last_timestamp,
> > > +                                          NULL);
> > > +          }
> > >       }
> > >     evas_object_clip_across_check(eo_obj, obj);
> > >  }
> > > diff --git a/src/lib/evas/canvas/evas_object_main.c
> > b/src/lib/evas/canvas/evas_object_main.c
> > > index 27fc7ad..c779f2d 100644
> > > --- a/src/lib/evas/canvas/evas_object_main.c
> > > +++ b/src/lib/evas/canvas/evas_object_main.c
> > > @@ -141,6 +141,7 @@ void
> > >  evas_object_free(Evas_Object *eo_obj, int clean_layer)
> > >  {
> > >     Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj,
MY_CLASS);
> > > +   Evas_Object *eo_obj2;
> > >     if (!obj) return;
> > >     obj->clean_layer = clean_layer;
> > >
> > > @@ -171,8 +172,21 @@ evas_object_free(Evas_Object *eo_obj, int
> > clean_layer)
> > >          obj->func->free(eo_obj, obj, obj->private_data);
> > >       }
> > >     if (!was_smart_child) evas_object_release(eo_obj, obj,
> > obj->clean_layer);
> > > -   if (obj->clip.clipees)
> > > -     eina_list_free(obj->clip.clipees);
> > > +   EINA_LIST_FREE(obj->clip.clipees, eo_obj2)
> > > +     {
> > > +        Evas_Object_Protected_Data *obj2 =
> > > +          eo_data_scope_get(eo_obj2, MY_CLASS);
> > > +        if ((obj2) && (obj2->cur))
> > > +          {
> > > +             EINA_COW_STATE_WRITE_BEGIN(obj2, state_write, cur)
> > > +               {
> > > +                  state_write->clipper = NULL;
> > > +               }
> > > +             EINA_COW_STATE_WRITE_END(obj2, state_write, cur);
> > > +          }
> > > +     }
> > > +//   if (obj->clip.clipees)
> > > +//     obj->clip.clipees = eina_list_free(obj->clip.clipees);
> > >     obj->clip.cache_clipees_answer =
> > eina_list_free(obj->clip.cache_clipees_answer);
> > >     evas_object_clip_changes_clean(eo_obj);
> > >     evas_object_event_callback_all_del(eo_obj);
> > > @@ -188,12 +202,17 @@ evas_object_free(Evas_Object *eo_obj, int
> > clean_layer)
> > >       }
> > >     if (obj->size_hints)
> > >       {
> > > -       EVAS_MEMPOOL_FREE(_mp_sh, obj->size_hints);
> > > +        EVAS_MEMPOOL_FREE(_mp_sh, obj->size_hints);
> > > +        obj->size_hints = NULL;
> > >       }
> > >     eina_cow_free(evas_object_proxy_cow, obj->proxy);
> > >     eina_cow_free(evas_object_map_cow, obj->map);
> > >     eina_cow_free(evas_object_state_cow, obj->cur);
> > >     eina_cow_free(evas_object_state_cow, obj->prev);
> > > +   obj->cur = NULL;
> > > +   obj->prev = NULL;
> > > +   obj->map = NULL;
> > > +   obj->proxy = NULL;
> > >     eo_data_unref(eo_obj, obj->private_data);
> > >     obj->private_data = NULL;
> > >     eo_manual_free(eo_obj);
> > >
> > > --
> > >
> > >
> > >
> >
------------------------------------------------------------------------------
> > Android is increasing in popularity, but the open development platform
that
> > developers love is also attractive to malware creators. Download this
white
> > paper to learn more about secure code signing practices that can help
keep
> > Android apps secure.
> >
http://pubads.g.doubleclick.net/gampad/clk?id=65839951&iu=/4140/ostg.clktrk
> > _______________________________________________
> > enlightenment-devel mailing list
> > enlightenment-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >
>
>
> --
> ------------- Codito, ergo sum - "I code, therefore I am" --------------
> The Rasterman (Carsten Haitzler)    ras...@rasterman.com
>
------------------------------------------------------------------------------
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951&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