After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 680373 - Property dialog for (big) TIFF files freezes nautilus
Property dialog for (big) TIFF files freezes nautilus
Status: RESOLVED FIXED
Product: nautilus
Classification: Core
Component: File Properties Dialog
3.4.x
Other Linux
: High blocker
: ---
Assigned To: Nautilus Maintainers
Nautilus Maintainers
: 610596 682704 (view as bug list)
Depends on: 473862
Blocks:
 
 
Reported: 2012-07-21 14:24 UTC by Volker Sobek (weld)
Modified: 2012-09-17 14:41 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Volker Sobek (weld) 2012-07-21 14:24:22 UTC
When I right-click on the attached file in nautilus and choose 'Properties', the properties dialog opens and nautilus freezes. It doesn't crash, it just hangs and seems to wait for some other process.

It doesn't happen every time, and it seems the bigger the TIFF file the more likely it will freeze nautilus.

Version:
nautilus-3.4.2-5.fc17.x86_64
Current git master is also affected by this.

Here's the backtrace after the freeze (pressed Ctrl+C as it doesn't crash): 

  • #0 __lll_lock_wait
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S line 136
  • #1 _L_lock_1024
    from /lib64/libpthread.so.0
  • #2 __pthread_mutex_lock
    at pthread_mutex_lock.c line 105
  • #3 g_mutex_lock
    at gthread-posix.c line 208
  • #4 _gdk_pixbuf_lock
    at gdk-pixbuf-io.c line 200
  • #5 _gdk_pixbuf_lock
    at gdk-pixbuf-io.c line 196
  • #6 gdk_pixbuf_loader_load_module
    at gdk-pixbuf-loader.c line 444
  • #7 gdk_pixbuf_loader_close
    at gdk-pixbuf-loader.c line 776
  • #8 load_from_stream
    at gdk-pixbuf-io.c line 1481
  • #9 gdk_pixbuf_new_from_stream_at_scale
  • #10 _gtk_icon_info_load_symbolic_internal
  • #11 gtk_icon_info_load_symbolic_for_context
  • #12 ensure_stated_icon_from_info
    at gtkiconhelper.c line 155
  • #13 ensure_pixbuf_for_icon_name_or_gicon
    at gtkiconhelper.c line 262
  • #14 _gtk_icon_helper_ensure_pixbuf
    at gtkiconhelper.c line 305
  • #15 _gtk_icon_helper_get_size
    at gtkiconhelper.c line 332
  • #16 gtk_image_get_preferred_size
    at gtkimage.c line 1357
  • #17 gtk_image_draw
    at gtkimage.c line 1390
  • #18 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #19 gtk_widget_draw_marshallerv
  • #20 _g_closure_invoke_va
    at gclosure.c line 840
  • #21 g_signal_emit_valist
    at gsignal.c line 3207
  • #22 g_signal_emit
    at gsignal.c line 3352
  • #23 _gtk_widget_draw_internal
    at gtkwidget.c line 5828
  • #24 _gtk_widget_draw_internal
    at gtkwidget.c line 5804
  • #25 gtk_container_propagate_draw
    at gtkcontainer.c line 3342
  • #26 gtk_box_forall
    at gtkbox.c line 1858
  • #27 gtk_container_draw
    at gtkcontainer.c line 3206
  • #28 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #29 gtk_widget_draw_marshallerv
    at gtkwidget.c line 850
  • #30 _g_closure_invoke_va
    at gclosure.c line 840
  • #31 g_signal_emit_valist
    at gsignal.c line 3207
  • #32 g_signal_emit
    at gsignal.c line 3352
  • #33 _gtk_widget_draw_internal
    at gtkwidget.c line 5828
  • #34 _gtk_widget_draw_internal
    at gtkwidget.c line 5804
  • #35 gtk_container_propagate_draw
    at gtkcontainer.c line 3342
  • #36 gtk_toggle_button_draw
    at gtktogglebutton.c line 589
  • #37 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #38 gtk_widget_draw_marshallerv
    at gtkwidget.c line 850
  • #39 _g_closure_invoke_va
    at gclosure.c line 840
  • #40 g_signal_emit_valist
  • #41 g_signal_emit
    at gsignal.c line 3352
  • #42 _gtk_widget_draw_internal
    at gtkwidget.c line 5828
  • #43 _gtk_widget_draw_internal
    at gtkwidget.c line 5804
  • #44 gtk_container_propagate_draw
  • #45 gtk_container_draw
    at gtkcontainer.c line 3206
  • #46 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #47 gtk_widget_draw_marshallerv
    at gtkwidget.c line 850
  • #48 _g_closure_invoke_va
    at gclosure.c line 840
  • #49 g_signal_emit_valist
    at gsignal.c line 3207
  • #50 g_signal_emit
    at gsignal.c line 3352
  • #51 _gtk_widget_draw_internal
    at gtkwidget.c line 5828
  • #52 _gtk_widget_draw_internal
    at gtkwidget.c line 5804
  • #53 gtk_container_propagate_draw
    at gtkcontainer.c line 3342
  • #54 toolbar_content_draw
    at gtktoolbar.c line 3386
  • #55 gtk_toolbar_draw
    at gtktoolbar.c line 877
  • #56 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #57 gtk_widget_draw_marshallerv
    at gtkwidget.c line 850
  • #58 _g_closure_invoke_va
    at gclosure.c line 840
  • #59 g_signal_emit_valist
    at gsignal.c line 3207
  • #60 g_signal_emit
    at gsignal.c line 3352
  • #61 _gtk_widget_draw_internal
    at gtkwidget.c line 5828
  • #62 _gtk_widget_draw_internal
    at gtkwidget.c line 5804
  • #63 gtk_container_propagate_draw
    at gtkcontainer.c line 3342
  • #64 gtk_box_forall
    at gtkbox.c line 1858
  • #65 gtk_container_draw
    at gtkcontainer.c line 3206
  • #66 _gtk_marshal_BOOLEAN__BOXEDv
  • #67 gtk_widget_draw_marshallerv
    at gtkwidget.c line 850
  • #68 _g_closure_invoke_va
  • #69 g_signal_emit_valist
    at gsignal.c line 3207
  • #70 g_signal_emit
    at gsignal.c line 3352
  • #71 _gtk_widget_draw_internal
    at gtkwidget.c line 5828
  • #72 _gtk_widget_draw_internal
    at gtkwidget.c line 5804
  • #73 gtk_container_propagate_draw
    at gtkcontainer.c line 3342
  • #74 gtk_box_forall
    at gtkbox.c line 1858
  • #75 gtk_container_draw
    at gtkcontainer.c line 3206
  • #76 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #77 gtk_widget_draw_marshallerv
    at gtkwidget.c line 850
  • #78 _g_closure_invoke_va
    at gclosure.c line 840
  • #79 g_signal_emit_valist
    at gsignal.c line 3207
  • #80 g_signal_emit
  • #81 _gtk_widget_draw_internal
    at gtkwidget.c line 5828
  • #82 _gtk_widget_draw_internal
    at gtkwidget.c line 5804
  • #83 gtk_container_propagate_draw
    at gtkcontainer.c line 3342
  • #84 gtk_paned_forall
  • #85 gtk_container_draw
    at gtkcontainer.c line 3206
  • #86 gtk_paned_draw
    at gtkpaned.c line 1505
  • #87 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #88 gtk_widget_draw_marshallerv
    at gtkwidget.c line 850
  • #89 _g_closure_invoke_va
    at gclosure.c line 840
  • #90 g_signal_emit_valist
    at gsignal.c line 3207
  • #91 g_signal_emit
    at gsignal.c line 3352
  • #92 _gtk_widget_draw_internal
    at gtkwidget.c line 5828
  • #93 _gtk_widget_draw_internal
    at gtkwidget.c line 5804
  • #94 gtk_widget_send_expose
    at gtkwidget.c line 6211
  • #95 gtk_main_do_event
    at gtkmain.c line 1621
  • #96 _gdk_window_process_updates_recurse
    at gdkwindow.c line 3884
  • #97 _gdk_window_process_updates_recurse
    at gdkwindow.c line 3929
  • #98 _gdk_window_process_updates_recurse
    at gdkwindow.c line 3929
  • #99 gdk_window_process_updates_internal
    at gdkwindow.c line 4070
  • #100 gdk_window_process_all_updates
    at gdkwindow.c line 4201
  • #101 gtk_container_idle_sizer
    at gtkcontainer.c line 1664
  • #102 gdk_threads_dispatch
    at gdk.c line 763
  • #103 g_main_dispatch
    at gmain.c line 2539
  • #104 g_main_context_dispatch
    at gmain.c line 3075
  • #105 g_main_context_iterate
    at gmain.c line 3146
  • #106 g_main_context_iteration
    at gmain.c line 3207
  • #107 g_application_run
    at gapplication.c line 1507
  • #108 main
    at nautilus-main.c line 101

Comment 1 Volker Sobek (weld) 2012-07-21 14:45:07 UTC
Well, I can't attach the TIFF file here as it is too big (4MB). But I tested TIFF files created with GIMP's export function (to TIFF with no compression) or created with

$ convert in.jpg out.tif # (part of ImageMagick)

and TIFF files created by both methods freeze nautilus as described.
Comment 2 Volker Sobek (weld) 2012-07-21 15:03:14 UTC
I suspect it's some race condition; I just tested TIFF images with different sizes (from small to big) and around 2.6MB was the first image that hang nautilus. But when running nautilus with gdb the same picture doesn't hang it.
Comment 3 William Jon McCann 2012-08-17 22:45:35 UTC
This is because the gdk-pixbuf TIFF loader is not threadsafe. Same happens with large SVG images.

A good example TIFF file is:
http://eoimages.gsfc.nasa.gov/images/imagerecords/57000/57723/globe_west_2048.tif
Comment 4 William Jon McCann 2012-08-17 22:54:20 UTC
See bug 473862
Comment 5 William Jon McCann 2012-08-26 13:51:53 UTC
*** Bug 682704 has been marked as a duplicate of this bug. ***
Comment 6 William Jon McCann 2012-09-15 16:34:02 UTC
*** Bug 610596 has been marked as a duplicate of this bug. ***
Comment 7 Matthias Clasen 2012-09-16 21:54:42 UTC
The tiff loader is now threadsafe
Comment 8 Cosimo Cecchi 2012-09-17 14:41:19 UTC
Nice, so I guess we can close this now.