From: gnome-perl (bugzilla.gnome.o. <bug...@gn...> - 2010-04-16 21:34:43
|
https://bugzilla.gnome.org/show_bug.cgi?id=615992 gnome-perl | Gtk2 | unspecified Summary: $SIG{CHLD}='IGNORE' + FileChooserDialog cause crash Classification: Bindings Product: gnome-perl Version: unspecified OS/Version: Linux Status: NEW Severity: normal Priority: Normal Component: Gtk2 AssignedTo: gtk...@li... ReportedBy: kaf...@gm... QAContact: gtk...@li... GNOME target: --- GNOME version: --- Created an attachment (id=158921) --> (https://bugzilla.gnome.org/attachment.cgi?id=158921) test case I'm filing this on behalf of an anonymous user who submitted it to SF.net's tracker: System: Fedora Core 4 (kernel 2.6.13-1.1526_FC4) Perl: 5.8.6-15 perl-Gtk2-GladeXML-1.005-1 perl-Glib-1.100-1 perl-Gtk2-1.100-1 If a perl program does the following sequence of events: $SIG{CHLD} = 'IGNORE'; calls socketpair() to create a pair of Unix sockets; fork()s a child process that dup()s one of the sockets to STDIN and STDOUT, then exec()s an arbitrary command (for the purpose of controlling said process via the other socket); displays a main window with Gtk2; displays a FileChooserDialog() as a response to any event on the main window (say a button press); on any moment during or after the FileChooserDialog display, the parent process causes the child process to terminate (say, via a command issued through the socket, or with a kill()), or if the child process terminates by itself without any parent intervention; ... then the application crashes at the moment the child process terminates. If the application never displays the FileChooserDialog, and terminates the child process, there is no crash. If the application does not issue the $SIG{CHLD}='IGNORE', and does all the other steps, there is no crash. This is the backtrace of the crash as seen by gdb: [alex@srv64 perl]$ gdb perl GNU gdb Red Hat Linux (6.3.0.0-1.21rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"...(no debugging symbols found) Using host libthread_db library "/lib/libthread_db.so.1". (gdb) set args Gtk2-FileChooser-test.pl (gdb) run Starting program: /usr/bin/perl Gtk2-FileChooser-test.pl Reading symbols from shared object read from target memory...(no debugging symbols found)...done. Loaded system supplied DSO at 0xcdd000 (no debugging symbols found) (no debugging symbols found) ... (no debugging symbols found) [Thread debugging using libthread_db enabled] [New Thread -1208550496 (LWP 20374)] (no debugging symbols found) (no debugging symbols found) ... (no debugging symbols found) Detaching after fork from child process 20379. (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) Entering sub loadDir... (no debugging symbols found) (no debugging symbols found) ... (no debugging symbols found) [New Thread -1211561040 (LWP 20384)] [New Thread -1211970640 (LWP 20385)] You aborted. Leaving sub loadDir... gatito lindo Program received signal SIGSEGV, Segmentation fault. [Switching to Thread -1208550496 (LWP 20374)] 0x00000001 in ?? () (gdb) bt #0 0x00000001 in ?? () #1 0x023b9599 in _gnome_vfs_canonicalize_pathname () from /usr/lib/libgnomevfs-2.so.0 #2 <signal handler called> #3 0x00cdd402 in __kernel_vsyscall () #4 0x00617221 in ___newselect_nocancel () from /lib/libc.so.6 #5 0x007780dd in _XEnq () from /usr/X11R6/lib/libX11.so.6 #6 0x007784d7 in _XRead () from /usr/X11R6/lib/libX11.so.6 #7 0x00779908 in _XReply () from /usr/X11R6/lib/libX11.so.6 #8 0x0079a31e in XkbGetState () from /usr/X11R6/lib/libX11.so.6 #9 0x0431ee15 in gdk_keymap_get_entries_for_keyval () from /usr/lib/libgdk-x11-2.0.so.0 #10 0x0431f0b1 in gdk_keymap_get_direction () from /usr/lib/libgdk-x11-2.0.so.0 #11 0x043155f6 in gdk_screen_get_setting () from /usr/lib/libgdk-x11-2.0.so.0 #12 0x04316d55 in gdk_screen_get_setting () from /usr/lib/libgdk-x11-2.0.so.0 #13 0x04316dcb in gdk_screen_get_setting () from /usr/lib/libgdk-x11-2.0.so.0 #14 0x00bdd4ce in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #15 0x00be04d6 in g_main_context_check () from /usr/lib/libglib-2.0.so.0 #16 0x00be07c3 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0 #17 0x040eba46 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0 #18 0x00ecdbbb in XS_Gtk2_main () from /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi/auto/Gtk2/Gtk2.so #19 0x0036a98c in Perl_pp_entersub () from /usr/lib/perl5/5.8.6/i386-linux-thread-multi/CORE/libperl.so #20 0x0034c6e1 in Perl_runops_debug () from /usr/lib/perl5/5.8.6/i386-linux-thread-multi/CORE/libperl.so #21 0x002fefe1 in perl_run () from /usr/lib/perl5/5.8.6/i386-linux-thread-multi/CORE/libperl.so #22 0x080493f4 in main () (gdb) quit The program is running. Exit anyway? (y or n) y [alex@srv64 perl]$ -- Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. |