On Wed, Apr 18, 2007 at 11:54:28PM -0500, Brian Mattern wrote:
> On Sun, Apr 08, 2007 at 03:49:08PM -0400, Christopher Michael wrote:
> > Hi all,
> > 
> > Mekius recently discovered a nasty segfault when trying to use the Enter 
> > key to dismiss a dialog. As it turns out, this affects all dialogs. 
> > After some digging into evas_callbacks.c I have come up with the 
> > following patch. I didn't commit because I'm not entirely sure that it's 
> > the proper solution, tho it does fix the segfault.
> >
> 
> I'm not sure this is a proper fix. It looks like it would just hide a
> bug that is somewhere else. It seems that one of the callbacks is
> triggering something that is setting obj->callbacks to NULL. I think
> that either the place that this happens needs to be modified to honor
> the 'walking_list' flag on the object, or the list walking needs to be
> modified to break if obj->callbacks is NULL after calling a cb func.
> 
> I only had a few minutes to look at this though, and I'm not very
> familiar with the code.
> 
> Brian
> 

After some more digging, here's what I've come up with:

  * When you hit enter, the button widget is 'activated'
  * e_widget_activate() calls the No buttons callback, which deletes the
    dialog
  * this frees the evas, which frees its layers, which frees its objects,
    which happens to set obj->callbacks to NULL
  * e is still looping through its callbacks at this point, and segfaults
  * the NULL check in the aforementioned patch happens to work, but only by
    luck (the object pointer its accessing is now invalid).

So, should we require that evas callbacks not free their evas? (E.g.
force them to schedule a free and then actually do it outside of any
callbacks)

Or, should we alter evas to defer evas frees while walking an object's
callbacks?

Brian


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to