On Mon, Mar 29, 2010 at 10:04 AM, Carsten Haitzler <ras...@rasterman.com> wrote: > 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
OK. I think I was actually not "lucky" before since those underlying bugs may be lurking somewhere to haunt me some time later. I will defer the clear. :-) However, it is interesting to note that if the clear happens when an item is selected (via clicking the item itself), there will be no valgrind complaints. In a sense, this is deleting itself too. To feed my curiosity, could you explain the difference between the two cases? Thanks in advance. :-) brian > >> > >> >> 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® 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 > > -- 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® 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