ports/51455: core dump when exiting ethereal
Charlie &
root at tomten.homelinux.net
Sun Apr 27 09:00:31 UTC 2003
>Number: 51455
>Category: ports
>Synopsis: core dump when exiting ethereal
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sun Apr 27 02:00:29 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator: Charlie &
>Release: FreeBSD 5.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD volvo.tomten.homelinux.net 5.0-CURRENT FreeBSD 5.0-CURRENT #0: Fri Apr 18 09:54:38 CEST 2003 root at volvo.tomten.homelinux.net:/usr/obj/usr/src/sys/KERNEL16 i386
root/usr/ports/net/ethereal#pkg_info | grep gtk-1.2
gtk-1.2.10_9 Gimp Toolkit for X11 GUI (previous stable version)
>Description:
Everytime i close ethereal the program core dumps. I ran the program in gdb and i can see that a bad pointer is used. The line that causes the crash is main.c:2320, here is part of the trace:
Program received signal SIGBUS, Bus error.
0x287a5782 in gdk_window_get_size () from /usr/X11R6/lib/libgdk12.so.2
(gdb) where
#0 0x287a5782 in gdk_window_get_size () from /usr/X11R6/lib/libgdk12.so.2
#1 0x08236dad in main (argc=0, argv=0xbfbff864) at main.c:2320
#2 0x08069faa in _start ()
(gdb) frame 1
#1 0x08236dad in main (argc=0, argv=0xbfbff864) at main.c:2320
2320 gdk_window_get_size(top_level->window, &top_width, &top_height);
(gdb) list
2315 }
2316
2317 if (prefs->gui_geometry_save_size) {
2318 if (top_level->window != NULL) {
2319 /* XXX - Is this the "approved" method? */
2320 gdk_window_get_size(top_level->window, &top_width, &top_height);
2321 }
2322 if (prefs->gui_geometry_main_width != top_width) {
2323 prefs->gui_geometry_main_width = top_width;
2324 prefs_write_needed = TRUE;
(gdb) p top_level->window
$2 = (struct _GdkWindow *) 0xd0d0d0d0
Here is my second trace, i have a watch on changes to top_level->window:
(gdb) info breakpoints
Num Type Disp Enb Address What
3 hw watchpoint keep y top_level->window
(gdb) c
Continuing.
Hardware watchpoint 3: top_level->window
Hardware watchpoint 3: top_level->window
Hardware watchpoint 3: top_level->window
Old value = (struct _GdkWindow *) 0x0
New value = (struct _GdkWindow *) 0x8695580
0x28756c6f in gtk_window_realize () from /usr/X11R6/lib/libgtk12.so.2
(gdb) where
#0 0x28756c6f in gtk_window_realize () from /usr/X11R6/lib/libgtk12.so.2
#1 0x286ed0eb in gtk_marshal_NONE__NONE () from /usr/X11R6/lib/libgtk12.so.2
#2 0x2871b6bb in gtk_signal_real_emit () from /usr/X11R6/lib/libgtk12.so.2
#3 0x28719874 in gtk_signal_emit () from /usr/X11R6/lib/libgtk12.so.2
#4 0x2874c7af in gtk_widget_realize () from /usr/X11R6/lib/libgtk12.so.2
#5 0x28756755 in gtk_window_show () from /usr/X11R6/lib/libgtk12.so.2
#6 0x286ed0eb in gtk_marshal_NONE__NONE () from /usr/X11R6/lib/libgtk12.so.2
#7 0x2871b6bb in gtk_signal_real_emit () from /usr/X11R6/lib/libgtk12.so.2
#8 0x28719874 in gtk_signal_emit () from /usr/X11R6/lib/libgtk12.so.2
#9 0x2874bbf2 in gtk_widget_show () from /usr/X11R6/lib/libgtk12.so.2
#10 0x08238217 in create_main_window (pl_size=280, tv_size=95, bv_size=75, prefs=0x8552500) at main.c:2737
#11 0x08236f75 in main (argc=0, argv=0xbfbff864) at main.c:2139
#12 0x08069faa in _start ()
(gdb) c
Continuing.
Hardware watchpoint 3: top_level->window
Old value = (struct _GdkWindow *) 0x8695580
New value = (struct _GdkWindow *) 0x0
0x2875387a in gtk_widget_real_unrealize () from /usr/X11R6/lib/libgtk12.so.2
(gdb) where
#0 0x2875387a in gtk_widget_real_unrealize () from /usr/X11R6/lib/libgtk12.so.2
#1 0x286ed0eb in gtk_marshal_NONE__NONE () from /usr/X11R6/lib/libgtk12.so.2
#2 0x2871b6bb in gtk_signal_real_emit () from /usr/X11R6/lib/libgtk12.so.2
#3 0x28719874 in gtk_signal_emit () from /usr/X11R6/lib/libgtk12.so.2
#4 0x2874c985 in gtk_widget_unrealize () from /usr/X11R6/lib/libgtk12.so.2
#5 0x28753235 in gtk_widget_shutdown () from /usr/X11R6/lib/libgtk12.so.2
#6 0x28755d53 in gtk_window_shutdown () from /usr/X11R6/lib/libgtk12.so.2
#7 0x286feb85 in gtk_object_destroy () from /usr/X11R6/lib/libgtk12.so.2
#8 0x2874bae1 in gtk_widget_destroy () from /usr/X11R6/lib/libgtk12.so.2
#9 0x286ebde1 in gtk_main_do_event () from /usr/X11R6/lib/libgtk12.so.2
#10 0x28794718 in gdk_event_dispatch () from /usr/X11R6/lib/libgdk12.so.2
#11 0x287c2a75 in g_main_dispatch () from /usr/local/lib/libglib12.so.3
#12 0x287c2f2c in g_main_iterate () from /usr/local/lib/libglib12.so.3
#13 0x287c3164 in g_main_run () from /usr/local/lib/libglib12.so.3
#14 0x286eb903 in gtk_main () from /usr/X11R6/lib/libgtk12.so.2
#15 0x08236c54 in main (argc=0, argv=0xbfbff864) at main.c:2275
#16 0x08069faa in _start ()
(gdb) c
Continuing.
Hardware watchpoint 3: top_level->window
Old value = (struct _GdkWindow *) 0x0
New value = (struct _GdkWindow *) 0xd0d0d0d0
0x2897d4e7 in memset () from /usr/lib/libc.so.5
(gdb) where
#0 0x2897d4e7 in memset () from /usr/lib/libc.so.5
#1 0x085c6f80 in ?? ()
#2 0x2897c7ea in tcflow () from /usr/lib/libc.so.5
#3 0x2897ca19 in free () from /usr/lib/libc.so.5
#4 0x287c3bf1 in g_free () from /usr/local/lib/libglib12.so.3
#5 0x287426f9 in gtk_type_free () from /usr/X11R6/lib/libgtk12.so.2
#6 0x286fecb5 in gtk_object_finalize () from /usr/X11R6/lib/libgtk12.so.2
#7 0x287533c1 in gtk_widget_finalize () from /usr/X11R6/lib/libgtk12.so.2
#8 0x287565b7 in gtk_window_finalize () from /usr/X11R6/lib/libgtk12.so.2
#9 0x28700b0d in gtk_object_unref () from /usr/X11R6/lib/libgtk12.so.2
#10 0x287544b9 in gtk_widget_unref () from /usr/X11R6/lib/libgtk12.so.2
#11 0x286ebd9e in gtk_main_do_event () from /usr/X11R6/lib/libgtk12.so.2
#12 0x28794718 in gdk_event_dispatch () from /usr/X11R6/lib/libgdk12.so.2
#13 0x287c2a75 in g_main_dispatch () from /usr/local/lib/libglib12.so.3
#14 0x287c2f2c in g_main_iterate () from /usr/local/lib/libglib12.so.3
#15 0x287c3164 in g_main_run () from /usr/local/lib/libglib12.so.3
#16 0x286eb903 in gtk_main () from /usr/X11R6/lib/libgtk12.so.2
#17 0x08236c54 in main (argc=0, argv=0xbfbff864) at main.c:2275
#18 0x08069faa in _start ()
(gdb) c
Continuing.
Program received signal SIGBUS, Bus error.
0x287a5782 in gdk_window_get_size () from /usr/X11R6/lib/libgdk12.so.2
(gdb) where
#0 0x287a5782 in gdk_window_get_size () from /usr/X11R6/lib/libgdk12.so.2
#1 0x08236dad in main (argc=0, argv=0xbfbff864) at main.c:2320
#2 0x08069faa in _start ()
(gdb) p top_level->window
$1 = (struct _GdkWindow *) 0xd0d0d0d0
The lesson to learn from these traces are that when the call to gtk_main() returns the top_level->window pointer is never NULL. Unfortunately i don't know gtk enough to help, but from what i can see there is no guarantee that top_level->window should be NULL after the call to gtk_main()??
My ugly (but working!!) solution is to save the pointer before the call to gtk_main() and then test after the call.
E.g.
struct _GdkWindow *gtkWindowCopy_ptr = top_level->window;
gtk_main();
if (NULL != top_level->window && top_level->window != gtkWindowCopy_ptr)
{
top_level->window = NULL;
}
>How-To-Repeat:
install ethereal, start the program and then exit the program.
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list