Bug 49250 - DnD crashes in Nautilus.
DnD crashes in Nautilus.
Status: CLOSED RAWHIDE
Product: Red Hat Raw Hide
Classification: Retired
Component: nautilus (Show other bugs)
1.0
i386 Linux
medium Severity medium
: ---
: ---
Assigned To: Alexander Larsson
Aaron Brown
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2001-07-17 09:32 EDT by Ed McKenzie
Modified: 2007-04-18 12:34 EDT (History)
0 users

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2001-07-20 11:29:07 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
The fix (610 bytes, patch)
2001-07-20 11:29 EDT, Alexander Larsson
no flags Details | Diff

  None (edit)
Description Ed McKenzie 2001-07-17 09:32:52 EDT
DnD operations seem flaky in the rawhide builds of Nautilus.  
Dragging folders to the Location bar only works for so long, and 
doing lots of copying via dnd tends to crash nautilus as well.  I can't 
access my machine from here, but from the core files it seems 
nautilus aborts and/or segfaults in fm_auto_icon_layout (function 
name from memory.)
Comment 1 Alexander Larsson 2001-07-17 15:56:58 EDT
Hmmm. I did manage to crash it once, but now I have trouble repeating it. Do you
know of a good way to make it crash?
Comment 2 Ed McKenzie 2001-07-17 16:39:43 EDT
While in /usr/share/doc, I triggered a segfault by dragging folders to the
Location Bar before Nautilus was done populating the window (or enumerating
contents.)  I don't know that this particular action is what caused the crash,
but it worked twice in several tries.  Here's my backtrace:

(gdb) where
#0  0x080a1a7a in fm_icon_view_supports_auto_layout () at eval.c:41
#1  0x404550a1 in eel_gtk_marshal_POINTER__POINTER_POINTER_POINTER ()
   from /usr/lib/libeel.so.0
#2  0x407e3916 in gtk_handlers_run () from /usr/lib/libgtk-1.2.so.0
#3  0x407e2c3d in gtk_signal_real_emit () from /usr/lib/libgtk-1.2.so.0
#4  0x407e09f5 in gtk_signal_emit () from /usr/lib/libgtk-1.2.so.0
#5  0x4023a579 in nautilus_icon_container_update_icon ()
   from /usr/lib/libnautilus-private.so.0
#6  0x4023f6a4 in set_drop_target () from /usr/lib/libnautilus-private.so.0
#7  0x4023f814 in nautilus_icon_dnd_update_drop_target ()
   from /usr/lib/libnautilus-private.so.0
#8  0x4023ff21 in drag_motion_callback ()
   from /usr/lib/libnautilus-private.so.0
#9  0x407b0068 in gtk_marshal_BOOL__POINTER_INT_INT_INT ()
   from /usr/lib/libgtk-1.2.so.0
#10 0x407e3916 in gtk_handlers_run () from /usr/lib/libgtk-1.2.so.0
#11 0x407e2c3d in gtk_signal_real_emit () from /usr/lib/libgtk-1.2.so.0
#12 0x407e0dd9 in gtk_signal_emit_by_name () from /usr/lib/libgtk-1.2.so.0
#13 0x4077d588 in gtk_drag_dest_motion () from /usr/lib/libgtk-1.2.so.0
#14 0x4077cf5f in gtk_drag_find_widget () from /usr/lib/libgtk-1.2.so.0
#15 0x4077ceb9 in gtk_drag_find_widget () from /usr/lib/libgtk-1.2.so.0
#16 0x4077ceb9 in gtk_drag_find_widget () from /usr/lib/libgtk-1.2.so.0
#17 0x4077ceb9 in gtk_drag_find_widget () from /usr/lib/libgtk-1.2.so.0
#18 0x4077ceb9 in gtk_drag_find_widget () from /usr/lib/libgtk-1.2.so.0
#19 0x4077ceb9 in gtk_drag_find_widget () from /usr/lib/libgtk-1.2.so.0
#20 0x4077ceb9 in gtk_drag_find_widget () from /usr/lib/libgtk-1.2.so.0
#21 0x4077ceb9 in gtk_drag_find_widget () from /usr/lib/libgtk-1.2.so.0
#22 0x4077ceb9 in gtk_drag_find_widget () from /usr/lib/libgtk-1.2.so.0
#23 0x4077c754 in gtk_drag_dest_handle_event () from /usr/lib/libgtk-1.2.so.0
#24 0x407af063 in gtk_main_do_event () from /usr/lib/libgtk-1.2.so.0
#25 0x40866e4f in gdk_event_dispatch () from /usr/lib/libgdk-1.2.so.0
#26 0x4089d7f3 in g_main_dispatch () from /usr/lib/libglib-1.2.so.0
#27 0x4089ddd9 in g_main_iterate () from /usr/lib/libglib-1.2.so.0
#28 0x4089df8c in g_main_run () from /usr/lib/libglib-1.2.so.0
#29 0x407ae803 in gtk_main () from /usr/lib/libgtk-1.2.so.0
#30 0x402fb0bc in bonobo_main () from /usr/lib/libbonobo.so.2
#31 0x0806d3b5 in main () at eval.c:41
#32 0x409580ce in __libc_start_main (main=0x806ceb0 <main>, argc=6, 
    ubp_av=0xbffffbd4, init=0x805e6d0 <_init>, fini=0x80b0030 <_fini>, 
    rtld_fini=0x4000cec8 <_dl_fini>, stack_end=0xbffffbcc)
    at ../sysdeps/generic/libc-start.c:129
(gdb) 

[OT: I think it's a gcc/gdb/binutils bug that any location without a
filename:lineno tag shows up as 'eval.c:41']
Comment 3 Ed McKenzie 2001-07-17 16:42:03 EDT
I should also note that each time Nautilus crashed, the '+' sign inside the
angle bracket was missing.
Comment 4 Alexander Larsson 2001-07-17 19:02:01 EDT
I saw that backtrace too, in my first crash. But i don't believe it. Since the
binaries don't have debug symbols the backtrace symbols only shows the "nearest"
 public symbol. 

I have been unable to generate this crash since i rebuild with debug symbols.
Comment 5 Alexander Larsson 2001-07-18 17:26:50 EDT
Here is a correct backtrace:

#0  0x40960cb1 in __kill () from /lib/i686/libc.so.6
#1  0x407d75eb in raise (sig=6) at signals.c:65
#2  0x40962232 in abort () at ../sysdeps/generic/abort.c:88
#3  0x407be09c in g_logv () at eval.c:41
#4  0x407be147 in g_log () at eval.c:41
#5  0x080a117f in get_icon_images_callback (container=0x82a8418, file=0x0,
modifier=0x408e77e5 "", emblem_icons=0xbfffec58, icon_view=0x8281ed0)
    at fm-icon-view.c:1941
#6  0x401d9108 in eel_gtk_marshal_POINTER__POINTER_POINTER_POINTER
(object=0x82a8418, func=0x80a10b8 <get_icon_images_callback>,
    func_data=0x8281ed0, args=0xbfffe960) at eel-gtk-extensions.c:1059
#7  0x40552406 in gtk_handlers_run () at eval.c:41
#8  0x4055173d in gtk_signal_real_emit () at eval.c:41
#9  0x4054f4f5 in gtk_signal_emit () at eval.c:41
#10 0x408b97ad in nautilus_icon_container_update_icon (container=0x82a8418,
icon=0x83d5f58) at nautilus-icon-container.c:3732
#11 0x408be355 in set_drop_target (container=0x82a8418, icon=0x0) at
nautilus-icon-dnd.c:1107
#12 0x408be4b7 in nautilus_icon_dnd_update_drop_target (container=0x82a8418,
context=0x84f7190, x=76, y=111) at nautilus-icon-dnd.c:1147
#13 0x408beb5a in drag_motion_callback (widget=0x82a8418, context=0x84f7190,
x=76, y=111, time=3337116829) at nautilus-icon-dnd.c:1310
#14 0x4051eba8 in gtk_marshal_BOOL__POINTER_INT_INT_INT () at eval.c:41
#15 0x40552406 in gtk_handlers_run () at eval.c:41
#16 0x4055173d in gtk_signal_real_emit () at eval.c:41
#17 0x4054f8d9 in gtk_signal_emit_by_name () at eval.c:41
#18 0x404ec158 in gtk_drag_dest_motion () at eval.c:41
#19 0x404ebb2d in gtk_drag_find_widget () at eval.c:41
#20 0x404eba87 in gtk_drag_find_widget () at eval.c:41
#21 0x404eba87 in gtk_drag_find_widget () at eval.c:41
#22 0x404eba87 in gtk_drag_find_widget () at eval.c:41
#23 0x404eba87 in gtk_drag_find_widget () at eval.c:41
#24 0x404eba87 in gtk_drag_find_widget () at eval.c:41
#25 0x404eba87 in gtk_drag_find_widget () at eval.c:41
#26 0x404eba87 in gtk_drag_find_widget () at eval.c:41
#27 0x404eba87 in gtk_drag_find_widget () at eval.c:41
#28 0x404eb2a4 in gtk_drag_dest_handle_event () at eval.c:41
#29 0x4051dba3 in gtk_main_do_event () at eval.c:41
#30 0x405ced8f in gdk_event_dispatch () at eval.c:41
#31 0x407bb773 in g_main_dispatch () at eval.c:41
#32 0x407bbd39 in g_main_iterate () at eval.c:41
#33 0x407bbeec in g_main_run () at eval.c:41
#34 0x4051d343 in gtk_main () at eval.c:41
#35 0x400830bc in bonobo_main () at eval.c:41
#36 0x0806fe99 in main (argc=1, argv=0xbffffaa4) at nautilus-main.c:283
#37 0x4094f5e7 in __libc_start_main (main=0x806f9bc <main>, argc=1,
ubp_av=0xbffffaa4, init=0x805f134 <_init>, fini=0x80aebc0 <_fini>,
(gdb) frame 5
#5  0x080a117f in get_icon_images_callback (container=0x82a8418, file=0x0,
modifier=0x408e77e5 "", emblem_icons=0xbfffec58, icon_view=0x8281ed0)
    at fm-icon-view.c:1941
1941
	g_assert (NAUTILUS_IS_FILE (file));
(gdb) frame 10
#10 0x408b97ad in nautilus_icon_container_update_icon (container=0x82a8418,
icon=0x83d5f58) at nautilus-icon-container.c:3732
3732
	  gtk_signal_emit (GTK_OBJECT (container),
(gdb) l
3727
}
3728
3729
	details = container->details;
3730
3731
	/* Get the icons. */
3732
	   gtk_signal_emit (GTK_OBJECT (container),
3733
					 signals[GET_ICON_IMAGES],
3734
								 icon->data,
3735
											 (icon == details->drop_target) ? "accept" : "",
3736
															 &emblem_scalable_icons,
(gdb) p *icon
$1 = {data = 0x0, item = 0x0, x = 1.4821969375237396e-323, y = 0, scale_x = 0,
scale_y = 0, is_selected = 0, was_selected_before_rubberband = 0}
(gdb) up
#11 0x408be355 in set_drop_target (container=0x82a8418, icon=0x0) at
nautilus-icon-dnd.c:1107
1107
	  nautilus_icon_container_update_icon (container, old_icon);
(gdb) l
1102
	return;
1103
		}
1104
1105
	/* Remember the new drop target for the next round. */
1106
	   container->details->drop_target = icon;
1107
					   nautilus_icon_container_update_icon (container, old_icon);
1108
									       nautilus_icon_container_update_icon (container, icon);
1109
									       }
1110
1111
static void
(gdb) p old_icon
$2 = (NautilusIcon *) 0x407e2618
(gdb) p icon
$3 = (NautilusIcon *) 0x0
Comment 6 Alexander Larsson 2001-07-20 11:28:13 EDT
I believe i have fixed this. I sent the patch to nautilus-list and it will
appear in a later version of the RH Nautilus RPMs.

If you want to try it I'll attach the patch to this bug.
Comment 7 Alexander Larsson 2001-07-20 11:29:03 EDT
Created attachment 24308 [details]
The fix
Comment 8 Alexander Larsson 2001-07-25 10:56:15 EDT
This is now in the nautilus-1.0.4-17 RPM. It should be in the next beta, and in
rawhide soon. I'm closing this bug.

Note You need to log in before you can comment on or make changes to this bug.