On Mon, 29 Mar 2010 01:12:31 +0800 Brian Wang <brian.wang.0...@gmail.com> said:

> On Sat, Mar 27, 2010 at 12:23 PM, Carsten Haitzler <ras...@rasterman.com>
> wrote:
> > On Sat, 27 Mar 2010 10:14:30 +0800 Brian Wang <brian.wang.0...@gmail.com>
> > said:
> >
> >> Hello all,
> >>
> >> With the up-to-date elm_genlist.c, my genlist app will crash.  I ran
> >> it with valgrind and pasted parts of the report at the end of this
> >> email.
> >
> > valgrind is happy with elm's own genlist tests.... what are you doing so
> > differently?
> 
> After playing around with my app, I've narrowed it down a bit.  Please
> see the attached code for a simple test case.
> What I did is adding an elm_button to the end (elm.swallow.end) of
> each genlist item.  Clicking the button will elm_genlist_clear the
> whole list and re-populate the whole list.  And this is when valgrind
> complains.
> 
> After a bit of thinking, I realize what I did is probably wrong?!
> Deleting the whole list while animating the clicking action of the
> elm_button contained in the list is probably a bad idea...  But it
> didn't go wrong before though.
> The new _item_queue does immediate action, not waiting for ecore idler
> to kick in, and that seems to be triggering the problem.
> I guess I can defer the elm_genlist_clear action if there's no better
> solution to this problem. :-)
> 
> Thank you for your time. :-)

aaaah yes. that'd be why. you actually were just lucky before - you managed to
survive on the fact that evas defers all deletes of objects. the queue thing
forces a norender which ends up deleting them then - evas designed to work this
way. i'll add some avoidance of this for convenience - but you probably should
defer the clear as u are indeed deleting yourself from underneath yourself

> >
> >> I reverted to r47414 and it didn't complain anymore and with r47416,
> >> it complained.  Diff of r47414 and r47416:
> >> Index: elm_genlist.c
> >> ===================================================================
> >> --- elm_genlist.c     (revision 47414)
> >> +++ elm_genlist.c     (revision 47416)
> >> @@ -1704,9 +1704,18 @@
> >>  _item_queue(Widget_Data *wd, Elm_Genlist_Item *it)
> >>  {
> >>     if (it->queued) return;
> >> -   if (!wd->queue_idler) wd->queue_idler = ecore_idler_add(_item_idler,
> >> wd); it->queued = EINA_TRUE;
> >>     wd->queue = eina_list_append(wd->queue, it);
> >> +   while ((wd->queue) && ((!wd->blocks) || (!wd->blocks->next)))
> >> +     {
> >> +        if (wd->queue_idler)
> >> +          {
> >> +             ecore_idler_del(wd->queue_idler);
> >> +             wd->queue_idler = NULL;
> >> +          }
> >> +        _item_idler(wd);
> >> +     }
> >> +   if (!wd->queue_idler) wd->queue_idler = ecore_idler_add(_item_idler,
> >> wd); }
> >>
> >>
> >> ==24485== Invalid read of size 1
> >> ==24485==    at 0x408401C: evas_object_smart_callback_call
> >> (evas_object_smart.c:509)
> >> ==24485==    by 0x41D4CEB: _signal_clicked (elm_button.c:149)
> >> ==24485==    by 0x471082E: edje_match_callback_exec_check_finals
> >> (edje_match.c:400)
> >> ==24485==    by 0x4710C3D: edje_match_callback_exec (edje_match.c:536)
> >> ==24485==    by 0x46FE380: _edje_emit_cb (edje_program.c:1280)
> >> ==24485==    by 0x46FE268: _edje_emit_handle (edje_program.c:1243)
> >> ==24485==    by 0x470DE00: _edje_message_process (edje_message_queue.c:612)
> >> ==24485==    by 0x470E101: _edje_message_queue_process
> >> (edje_message_queue.c:692)
> >> ==24485==    by 0x470D2BB: _edje_job (edje_message_queue.c:172)
> >> ==24485==    by 0x41526D3: _ecore_job_event_handler (ecore_job.c:102)
> >> ==24485==    by 0x414E03F: _ecore_event_call (ecore_events.c:550)
> >> ==24485==    by 0x41538DC: _ecore_main_loop_iterate_internal
> >> (ecore_main.c:880) ==24485==  Address 0x5d229cb is 219 bytes inside a block
> >> of size 220 free'd ==24485==    at 0x4024836: free
> >> (vg_replace_malloc.c:325) ==24485==    by 0x4079CDC: evas_object_free
> >> (evas_object_main.c:79) ==24485==    by 0x40A935C:
> >> evas_render_updates_internal (evas_render.c:1129) ==24485==    by
> >> 0x40A9689: evas_norender (evas_render.c:1248) ==24485==    by 0x41EB48E:
> >> _item_block_recalc (elm_genlist.c:1013) ==24485==    by 0x41ECF24:
> >> _item_idler (elm_genlist.c:1685) ==24485==    by 0x41ED072: _item_queue
> >> (elm_genlist.c:1720) ==24485==    by 0x41ED24F: elm_genlist_item_append
> >> (elm_genlist.c:1773) ==24485==    by 0x6D454E7: musicBrowser_populate
> >> (musicBrowser.c:608) ==24485==    by 0x6D446CE: _browser_item_play_clicked
> >> (musicBrowser.c:132) ==24485==    by 0x4084018:
> >> evas_object_smart_callback_call (evas_object_smart.c:507)
> >> ==24485==    by 0x41D4CEB: _signal_clicked (elm_button.c:149)
> >> ==24485==
> >> ==24485== Invalid read of size 4
> >> ==24485==    at 0x408405A: evas_object_smart_callback_call
> >> (evas_object_smart.c:513)
> >> ==24485==    by 0x41D4CEB: _signal_clicked (elm_button.c:149)
> >> ==24485==    by 0x471082E: edje_match_callback_exec_check_finals
> >> (edje_match.c:400)
> >> ==24485==    by 0x4710C3D: edje_match_callback_exec (edje_match.c:536)
> >> ==24485==    by 0x46FE380: _edje_emit_cb (edje_program.c:1280)
> >> ==24485==    by 0x46FE268: _edje_emit_handle (edje_program.c:1243)
> >> ==24485==    by 0x470DE00: _edje_message_process (edje_message_queue.c:612)
> >> ==24485==    by 0x470E101: _edje_message_queue_process
> >> (edje_message_queue.c:692)
> >> ==24485==    by 0x470D2BB: _edje_job (edje_message_queue.c:172)
> >> ==24485==    by 0x41526D3: _ecore_job_event_handler (ecore_job.c:102)
> >> ==24485==    by 0x414E03F: _ecore_event_call (ecore_events.c:550)
> >> ==24485==    by 0x41538DC: _ecore_main_loop_iterate_internal
> >> (ecore_main.c:880) ==24485==  Address 0x5d2e49c is 28 bytes inside a block
> >> of size 36 free'd ==24485==    at 0x4024836: free (vg_replace_malloc.c:325)
> >> ==24485==    by 0x4084F68: evas_object_smart_free
> >> (evas_object_smart.c:1029) ==24485==    by 0x4079C09: evas_object_free
> >> (evas_object_main.c:62) ==24485==    by 0x40A935C:
> >> evas_render_updates_internal (evas_render.c:1129) ==24485==    by
> >> 0x40A9689: evas_norender (evas_render.c:1248) ==24485==    by 0x41EB48E:
> >> _item_block_recalc (elm_genlist.c:1013) ==24485==    by 0x41ECF24:
> >> _item_idler (elm_genlist.c:1685) ==24485==    by 0x41ED072: _item_queue
> >> (elm_genlist.c:1720) ==24485==    by 0x41ED24F: elm_genlist_item_append
> >> (elm_genlist.c:1773) ==24485==    by 0x6D454E7: musicBrowser_populate
> >> (musicBrowser.c:608) ==24485==    by 0x6D446CE: _browser_item_play_clicked
> >> (musicBrowser.c:132) ==24485==    by 0x4084018:
> >> evas_object_smart_callback_call (evas_object_smart.c:507)
> >> ==24485==
> >> ==24485== Invalid write of size 4
> >> ==24485==    at 0x4084063: evas_object_smart_callback_call
> >> (evas_object_smart.c:513)
> >> ==24485==    by 0x41D4CEB: _signal_clicked (elm_button.c:149)
> >> ==24485==    by 0x471082E: edje_match_callback_exec_check_finals
> >> (edje_match.c:400)
> >> ==24485==    by 0x4710C3D: edje_match_callback_exec (edje_match.c:536)
> >> ==24485==    by 0x46FE380: _edje_emit_cb (edje_program.c:1280)
> >> ==24485==    by 0x46FE268: _edje_emit_handle (edje_program.c:1243)
> >> ==24485==    by 0x470DE00: _edje_message_process (edje_message_queue.c:612)
> >> ==24485==    by 0x470E101: _edje_message_queue_process
> >> (edje_message_queue.c:692)
> >> ==24485==    by 0x470D2BB: _edje_job (edje_message_queue.c:172)
> >> ==24485==    by 0x41526D3: _ecore_job_event_handler (ecore_job.c:102)
> >> ==24485==    by 0x414E03F: _ecore_event_call (ecore_events.c:550)
> >> ==24485==    by 0x41538DC: _ecore_main_loop_iterate_internal
> >> (ecore_main.c:880) ==24485==  Address 0x5d2e49c is 28 bytes inside a block
> >> of size 36 free'd ==24485==    at 0x4024836: free (vg_replace_malloc.c:325)
> >> ==24485==    by 0x4084F68: evas_object_smart_free
> >> (evas_object_smart.c:1029) ==24485==    by 0x4079C09: evas_object_free
> >> (evas_object_main.c:62) ==24485==    by 0x40A935C:
> >> evas_render_updates_internal (evas_render.c:1129) ==24485==    by
> >> 0x40A9689: evas_norender (evas_render.c:1248) ==24485==    by 0x41EB48E:
> >> _item_block_recalc (elm_genlist.c:1013) ==24485==    by 0x41ECF24:
> >> _item_idler (elm_genlist.c:1685) ==24485==    by 0x41ED072: _item_queue
> >> (elm_genlist.c:1720) ==24485==    by 0x41ED24F: elm_genlist_item_append
> >> (elm_genlist.c:1773) ==24485==    by 0x6D454E7: musicBrowser_populate
> >> (musicBrowser.c:608) ==24485==    by 0x6D446CE: _browser_item_play_clicked
> >> (musicBrowser.c:132) ==24485==    by 0x4084018:
> >> evas_object_smart_callback_call (evas_object_smart.c:507)
> >> ==24485==
> >> ==24485== Invalid read of size 4
> >> ==24485==    at 0x40849EC: evas_object_smart_callbacks_clear
> >> (evas_object_smart.c:866)
> >> ==24485==    by 0x4084070: evas_object_smart_callback_call
> >> (evas_object_smart.c:514)
> >> ==24485==    by 0x41D4CEB: _signal_clicked (elm_button.c:149)
> >> ==24485==    by 0x471082E: edje_match_callback_exec_check_finals
> >> (edje_match.c:400)
> >> ==24485==    by 0x4710C3D: edje_match_callback_exec (edje_match.c:536)
> >> ==24485==    by 0x46FE380: _edje_emit_cb (edje_program.c:1280)
> >> ==24485==    by 0x46FE268: _edje_emit_handle (edje_program.c:1243)
> >> ==24485==    by 0x470DE00: _edje_message_process (edje_message_queue.c:612)
> >> ==24485==    by 0x470E101: _edje_message_queue_process
> >> (edje_message_queue.c:692)
> >> ==24485==    by 0x470D2BB: _edje_job (edje_message_queue.c:172)
> >> ==24485==    by 0x41526D3: _ecore_job_event_handler (ecore_job.c:102)
> >> ==24485==    by 0x414E03F: _ecore_event_call (ecore_events.c:550)
> >> ==24485==  Address 0x5d229a8 is 184 bytes inside a block of size 220 free'd
> >> ==24485==    at 0x4024836: free (vg_replace_malloc.c:325)
> >> ==24485==    by 0x4079CDC: evas_object_free (evas_object_main.c:79)
> >> ==24485==    by 0x40A935C: evas_render_updates_internal
> >> (evas_render.c:1129) ==24485==    by 0x40A9689: evas_norender
> >> (evas_render.c:1248) ==24485==    by 0x41EB48E: _item_block_recalc
> >> (elm_genlist.c:1013) ==24485==    by 0x41ECF24: _item_idler
> >> (elm_genlist.c:1685) ==24485==    by 0x41ED072: _item_queue
> >> (elm_genlist.c:1720) ==24485==    by 0x41ED24F: elm_genlist_item_append
> >> (elm_genlist.c:1773) ==24485==    by 0x6D454E7: musicBrowser_populate
> >> (musicBrowser.c:608) ==24485==    by 0x6D446CE: _browser_item_play_clicked
> >> (musicBrowser.c:132) ==24485==    by 0x4084018:
> >> evas_object_smart_callback_call (evas_object_smart.c:507)
> >> ==24485==    by 0x41D4CEB: _signal_clicked (elm_button.c:149)
> >> ==24485==
> >> ==24485== Invalid read of size 4
> >> ==24485==    at 0x40849F8: evas_object_smart_callbacks_clear
> >> (evas_object_smart.c:868)
> >> ==24485==    by 0x4084070: evas_object_smart_callback_call
> >> (evas_object_smart.c:514)
> >> ==24485==    by 0x41D4CEB: _signal_clicked (elm_button.c:149)
> >> ==24485==    by 0x471082E: edje_match_callback_exec_check_finals
> >> (edje_match.c:400)
> >> ==24485==    by 0x4710C3D: edje_match_callback_exec (edje_match.c:536)
> >> ==24485==    by 0x46FE380: _edje_emit_cb (edje_program.c:1280)
> >> ==24485==    by 0x46FE268: _edje_emit_handle (edje_program.c:1243)
> >> ==24485==    by 0x470DE00: _edje_message_process (edje_message_queue.c:612)
> >> ==24485==    by 0x470E101: _edje_message_queue_process
> >> (edje_message_queue.c:692)
> >> ==24485==    by 0x470D2BB: _edje_job (edje_message_queue.c:172)
> >> ==24485==    by 0x41526D3: _ecore_job_event_handler (ecore_job.c:102)
> >> ==24485==    by 0x414E03F: _ecore_event_call (ecore_events.c:550)
> >> ==24485==  Address 0x5d2e49c is 28 bytes inside a block of size 36 free'd
> >> ==24485==    at 0x4024836: free (vg_replace_malloc.c:325)
> >> ==24485==    by 0x4084F68: evas_object_smart_free
> >> (evas_object_smart.c:1029) ==24485==    by 0x4079C09: evas_object_free
> >> (evas_object_main.c:62) ==24485==    by 0x40A935C:
> >> evas_render_updates_internal (evas_render.c:1129) ==24485==    by
> >> 0x40A9689: evas_norender (evas_render.c:1248) ==24485==    by 0x41EB48E:
> >> _item_block_recalc (elm_genlist.c:1013) ==24485==    by 0x41ECF24:
> >> _item_idler (elm_genlist.c:1685) ==24485==    by 0x41ED072: _item_queue
> >> (elm_genlist.c:1720) ==24485==    by 0x41ED24F: elm_genlist_item_append
> >> (elm_genlist.c:1773) ==24485==    by 0x6D454E7: musicBrowser_populate
> >> (musicBrowser.c:608) ==24485==    by 0x6D446CE: _browser_item_play_clicked
> >> (musicBrowser.c:132) ==24485==    by 0x4084018:
> >> evas_object_smart_callback_call (evas_object_smart.c:507)
> >>
> >>
> >> --
> >> brian
> >> ------------------
> >>
> >> Cool-Karaoke - The smallest recording studio, in your palm, open-sourced
> >> http://cool-idea.com.tw/
> >>
> >> iMaGiNaTiOn iS mOrE iMpOrTaNt tHaN kNoWlEdGe
> >>
> >> ------------------------------------------------------------------------------
> >> Download Intel&#174; Parallel Studio Eval
> >> Try the new software tools for yourself. Speed compiling, find bugs
> >> proactively, and fine-tune applications for parallel performance.
> >> See why Intel Parallel Studio got high marks during beta.
> >> http://p.sf.net/sfu/intel-sw-dev
> >> _______________________________________________
> >> 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
> >
> >
> 
> 
> 
> -- 
> brian
> ------------------
> 
> Cool-Karaoke - The smallest recording studio, in your palm, open-sourced
> http://cool-idea.com.tw/
> 
> iMaGiNaTiOn iS mOrE iMpOrTaNt tHaN kNoWlEdGe
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to