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