Yes, I was referring to unit tests. It would be ideal if a unit test could
be added for all issues to ensure that they do not occur again.

On Fri, Jun 15, 2018 at 12:39 AM Hermet Park <[email protected]> wrote:

> ok, will.
>
> On Fri, Jun 15, 2018 at 12:41 PM, Vincent Torri <[email protected]>
> wrote:
>
> > On Fri, Jun 15, 2018 at 4:05 AM, Hermet Park <[email protected]>
> wrote:
> > > Eo* obj = evas_object_vg_add(canvas);
> > > Efl_VG* root = evas_vg_container_add(obj);
> > > evas_object_vg_root_node_set(obj, root);
> > > efl_parent_set(root, NULL);
> > >
> > > **crash**
> >
> > maybe a unit test should be added ?
> >
> > Vincent
> >
> > >
> > >
> > > On Fri, Jun 15, 2018 at 1:17 AM, Mike Blumenkrantz <
> > > [email protected]> wrote:
> > >
> > >> Are there tests for any of these things that are being fixed?
> > >>
> > >> On Thu, Jun 14, 2018 at 12:11 PM Hermet Park <[email protected]>
> > wrote:
> > >>
> > >> > hermet pushed a commit to branch master.
> > >> >
> > >> >
> > >> > http://git.enlightenment.org/core/efl.git/commit/?id=
> > >> c8c0dbb32bd7f38b0faf524b1a55585f99d1cb17
> > >> >
> > >> > commit c8c0dbb32bd7f38b0faf524b1a55585f99d1cb17
> > >> > Author: Hermet Park <[email protected]>
> > >> > Date:   Fri Jun 15 01:00:53 2018 +0900
> > >> >
> > >> >     evas vg: prevent a corner-case crash.
> > >> >
> > >> >     tbh, current vg interfaces a little bit bad... here is one
> > scenario
> > >> to
> > >> > this
> > >> >     stupid case.
> > >> >
> > >> >     efl_parent_set() and evas_object_vg_root_node_set() both do
> > re-parent
> > >> >      job. They could be conflicted if user calls both apis in either
> > way.
> > >> >
> > >> >     efl_parent_set(root_node, NULL); but Vg Object still keeps the
> > root
> > >> > node
> > >> >     which is just a dangling pointer that occurs a crash while
> > rendering.
> > >> > ---
> > >> >  src/lib/evas/canvas/efl_canvas_vg_object.c |  2 ++
> > >> >  src/lib/evas/canvas/evas_vg_node.c         | 23
> > +++++++++++++++++++++++
> > >> >  src/lib/evas/canvas/evas_vg_private.h      |  5 +++++
> > >> >  3 files changed, 30 insertions(+)
> > >> >
> > >> > diff --git a/src/lib/evas/canvas/efl_canvas_vg_object.c
> > >> > b/src/lib/evas/canvas/efl_canvas_vg_object.c
> > >> > index c39fc5b980..cfd1898326 100644
> > >> > --- a/src/lib/evas/canvas/efl_canvas_vg_object.c
> > >> > +++ b/src/lib/evas/canvas/efl_canvas_vg_object.c
> > >> > @@ -172,6 +172,8 @@ _efl_canvas_vg_object_root_node_set(Eo *obj,
> > >> > Efl_Canvas_Vg_Object_Data *pd, Efl_
> > >> >
> > >> >          // set the parent so that vg canvas can render it.
> > >> >          efl_parent_set(pd->user_entry->root, pd->root);
> > >> > +
> > >> > +        efl_canvas_vg_node_root_set(root_node, obj);
> > >> >       }
> > >> >     else if (pd->user_entry)
> > >> >       {
> > >> > diff --git a/src/lib/evas/canvas/evas_vg_node.c
> > >> > b/src/lib/evas/canvas/evas_vg_node.c
> > >> > index ac054d4c07..1427beb693 100644
> > >> > --- a/src/lib/evas/canvas/evas_vg_node.c
> > >> > +++ b/src/lib/evas/canvas/evas_vg_node.c
> > >> > @@ -322,9 +322,24 @@ _efl_canvas_vg_node_efl_object_parent_set(Eo
> > *obj,
> > >> >  {
> > >> >     Efl_Canvas_Vg_Container_Data *cd = NULL;
> > >> >     Efl_Canvas_Vg_Container_Data *old_cd;
> > >> > +   Efl_Canvas_Vg_Node_Data *nd;
> > >> >     Efl_VG *old_parent;
> > >> >     Eina_Bool parent_container = EINA_TRUE;
> > >> >
> > >> > +   nd = efl_data_scope_get(obj, MY_CLASS);
> > >> > +
> > >> > +   //No, prevent infinite calls parent_set() -> root_node_set() ->
> > >> > parent_set() -> ...
> > >> > +   if (nd->parenting) return;
> > >> > +
> > >> > +   //Cut off root node from vg object if it does....
> > >> > +   if (nd->vg_obj)
> > >> > +     {
> > >> > +        nd->parenting = EINA_TRUE;
> > >> > +        evas_object_vg_root_node_set(nd->vg_obj, NULL);
> > >> > +        nd->parenting = EINA_FALSE;
> > >> > +        nd->vg_obj = NULL;
> > >> > +     }
> > >> > +
> > >> >     if (efl_isa(parent, EFL_CANVAS_VG_CONTAINER_CLASS))
> > >> >       cd = efl_data_scope_get(parent,
> EFL_CANVAS_VG_CONTAINER_CLASS);
> > >> >     else if (efl_isa(parent, EFL_CANVAS_VG_OBJECT_CLASS))
> > >> > @@ -707,6 +722,14 @@ _efl_canvas_vg_node_efl_gfx_path_interpolate(Eo
> > >> *obj,
> > >> > Efl_Canvas_Vg_Node_Data *p
> > >> >     return EINA_TRUE;
> > >> >  }
> > >> >
> > >> > +void
> > >> > +efl_canvas_vg_node_root_set(Efl_VG *node, Efl_VG *vg_obj)
> > >> > +{
> > >> > +   Efl_Canvas_Vg_Node_Data *nd = efl_data_scope_get(node,
> MY_CLASS);
> > >> > +   nd->vg_obj = vg_obj;
> > >> > +}
> > >> > +
> > >> > +
> > >> >  EOLIAN static Efl_VG *
> > >> >  _efl_canvas_vg_node_efl_duplicate_duplicate(const Eo *obj,
> > >> > Efl_Canvas_Vg_Node_Data *pd)
> > >> >  {
> > >> > diff --git a/src/lib/evas/canvas/evas_vg_private.h
> > >> > b/src/lib/evas/canvas/evas_vg_private.h
> > >> > index 4ff8b2bb45..cc43fb03ab 100644
> > >> > --- a/src/lib/evas/canvas/evas_vg_private.h
> > >> > +++ b/src/lib/evas/canvas/evas_vg_private.h
> > >> > @@ -62,6 +62,8 @@ struct _Efl_Canvas_Vg_Node_Data
> > >> >     Efl_Canvas_Vg_Node *mask;
> > >> >     Ector_Renderer *renderer;
> > >> >
> > >> > +   Efl_VG *vg_obj;
> > >> > +
> > >> >     void (*render_pre)(Eo *obj, Eina_Matrix3 *parent, Ector_Surface
> > *s,
> > >> > void *data, Efl_Canvas_Vg_Node_Data *nd);
> > >> >     void *data;
> > >> >
> > >> > @@ -71,6 +73,7 @@ struct _Efl_Canvas_Vg_Node_Data
> > >> >
> > >> >     Eina_Bool visibility : 1;
> > >> >     Eina_Bool changed : 1;
> > >> > +   Eina_Bool parenting : 1;
> > >> >  };
> > >> >
> > >> >  struct _Efl_Canvas_Vg_Container_Data
> > >> > @@ -108,6 +111,8 @@ Vg_File_Data *
> > >> > evas_cache_vg_file_info(const char *file, const char
> > >> >
> > >> >  Eina_Bool                   evas_vg_save_to_file(Vg_File_Data
> > >> *evg_data,
> > >> > const char *file, const char *key, const char *flags);
> > >> >
> > >> > +void                        efl_canvas_vg_node_root_set(Efl_VG
> > *node,
> > >> > Efl_VG *vg_obj);
> > >> > +
> > >> >  static inline Efl_Canvas_Vg_Node_Data *
> > >> >  _evas_vg_render_pre(Efl_VG *child, Ector_Surface *s, Eina_Matrix3
> *m)
> > >> >  {
> > >> >
> > >> > --
> > >> >
> > >> >
> > >> >
> > >> ------------------------------------------------------------
> > >> ------------------
> > >> Check out the vibrant tech community on one of the world's most
> > >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> > >> _______________________________________________
> > >> enlightenment-devel mailing list
> > >> [email protected]
> > >> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> > >>
> > >
> > >
> > >
> > > --
> > > Regards, Hermet
> > > ------------------------------------------------------------
> > ------------------
> > > Check out the vibrant tech community on one of the world's most
> > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> > > _______________________________________________
> > > enlightenment-devel mailing list
> > > [email protected]
> > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >
> > ------------------------------------------------------------
> > ------------------
> > Check out the vibrant tech community on one of the world's most
> > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> > _______________________________________________
> > enlightenment-devel mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >
>
>
>
> --
> Regards, Hermet
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> enlightenment-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to