fix in svn, rev 81403.
On Fri, Dec 14, 2012 at 05:30:14PM -0200, Leandro Dorileo wrote: > Hi Guys, > > I've tested ephysics with valgrind seeking for memory leaks and found a > situation with edje EXTERNAL. > It obviously leaks externals parsed params data. But I'm not sure where the > fix should be done. > > On edje_load.c in the line 863 the objects params are parsed and allocated, > this data should be freed > in the function _edje_file_del() line 1357, where > _edje_external_parsed_params_free() is called, this > function will try to get the "Edje_External_Type" from > rp->typedata.swallow->swallowed_object to define > who should be called to free the params. > > I traced the code execution and found that in this point the swallowed_object > was already freed - what > results in evas_object_data_get(obj, "Edje_External_Type") returning NULL. I > saw the eo's _destructor > was called before _edje_external_parsed_params_free() takes place. > > I've coped the scenario with a very little example using edje EXTERNAL with > elm/button source. See that > external_button_params_free() is never called, since swallowed object was > removed before the external > edje external part. > > I'm attaching a source code you can use to test it. If you run it with > valgrind will see the following > stack: > > ==4706== by 0x6823221: _edje_external_params_parse (edje_external.c:624) > ==4706== by 0x68261B7: _edje_object_file_set_internal (edje_load.c:863) > ==4706== by 0x68360E7: _edje_smart_file_set (edje_smart.c:310) > ==4706== by 0xC2D1990: _eo_op_internal (eo.c:363) > ==4706== by 0xC2D36CE: eo_do_internal (eo.c:403) > ==4706== by 0x682393E: edje_object_file_set (edje_load.c:79) > ==4706== by 0x4F13AD2: _elm_layout_smart_file_set (elm_layout.c:1459) > ==4706== by 0xC2D1990: _eo_op_internal (eo.c:363) > ==4706== by 0xC2D36CE: eo_do_internal (eo.c:403) > ==4706== by 0x4F16771: elm_layout_file_set (elm_layout.c:1444) > > > Regards... > > -- > Leandro Dorileo > ProFUSION embedded systems > http://profusion.mobi > externals { > external: "elm"; > } > > collections { > > group { > name: "my_group"; > > parts { > > part { > name: "test_button"; > type: EXTERNAL; > source: "elm/button"; > mouse_events: 1; > description { > state: "default" 0.0; > rel1.relative: 1 0.08; > rel2.relative: 1 0.08; > color: 255 0 0 255; > fixed: 1 1; > align: 1 0.5; > } > > } > } > } > } > > #include <Elementary.h> > > #define WIDTH 500 > #define HEIGHT 500 > > EAPI_MAIN int > elm_main(int argc, char **argv) > { > Evas_Object *layout, *win, *bg; > > win = elm_win_add(NULL, "Test", ELM_WIN_BASIC); > elm_win_title_set(win, "Test"); > elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); > elm_win_autodel_set(win, EINA_TRUE); > > layout = elm_layout_add(win); > elm_win_resize_object_add(win, layout); > elm_layout_file_set(layout, "./test.edj", "my_group"); > evas_object_show(layout); > > bg = elm_bg_add(win); > elm_bg_color_set(bg, 255,255 ,255); > evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); > elm_win_resize_object_add(win, bg); > evas_object_show(bg); > > evas_object_resize(win, WIDTH, HEIGHT); > evas_object_show(win); > > elm_run(); > elm_shutdown(); > > return 0; > } > ELM_MAIN() -- Leandro Dorileo ProFUSION embedded systems http://profusion.mobi ------------------------------------------------------------------------------ LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial Remotely access PCs and mobile devices and provide instant support Improve your efficiency, and focus on delivering more value-add services Discover what IT Professionals Know. Rescue delivers http://p.sf.net/sfu/logmein_12329d2d _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
