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.

Here is the backtrace:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1215646016 (LWP 5953)]
evas_object_event_callback_call (obj=0x857be20, type=EVAS_CALLBACK_KEY_DOWN,
    event_info=0xbfacbe58) at evas_callbacks.c:259
259             obj->callbacks->walking_list--;
#0  evas_object_event_callback_call (obj=0x857be20,
type=EVAS_CALLBACK_KEY_DOWN, event_info=0xbfacbe58) at evas_callbacks.c:259
#1  0xb7e09acd in evas_event_feed_key_down (e=0x856a760,
keyname=0x85c4db8 "Return", key=0x8215108 "Return", string=0x81d49e8 "\r",
    compose=0x0, timestamp=55205686, data=0x0) at evas_events.c:820
#2  0xb7ef0480 in _ecore_evas_x_event_key_down (data=0x0, type=10,
    event=0x85c74a0) at ecore_evas_x.c:472
#3  0xb7ce0bb6 in _ecore_event_call () at ecore_events.c:428
#4  0xb7ce770e in _ecore_main_loop_iterate_internal (once_only=0)
    at ecore_main.c:639
#5  0xb7ce78f7 in ecore_main_loop_begin () at ecore_main.c:79
#6  0x080683b1 in main (argc=1, argv=0xbfacf954) at e_main.c:875
Continuing.

Patch attached.

devilhorns
Index: evas_callbacks.c
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_callbacks.c,v
retrieving revision 1.30
diff -u -r1.30 evas_callbacks.c
--- evas_callbacks.c	5 Apr 2007 15:40:51 -0000	1.30
+++ evas_callbacks.c	8 Apr 2007 19:45:42 -0000
@@ -243,7 +243,9 @@
              default:
                break;
           }
-        obj->callbacks->walking_list++;
+	if (obj->callbacks)
+	  obj->callbacks->walking_list++;
+
         for (l = *l_mod; l; l = l->next)
           {
 	     Evas_Func_Node *fn;
@@ -256,9 +258,12 @@
 	       }
 	     if (obj->delete_me) break;
           }
-        obj->callbacks->walking_list--;
-        if (!obj->callbacks->walking_list)
-          evas_object_event_callback_clear(obj);
+	if (obj->callbacks) 
+	  {
+	     obj->callbacks->walking_list--;
+	     if (!obj->callbacks->walking_list)
+	       evas_object_event_callback_clear(obj);
+	  }
         
         if (type == EVAS_CALLBACK_MOUSE_DOWN)
           {
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to