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 773499 - window: check for an active slot when updating cursor
window: check for an active slot when updating cursor
Status: RESOLVED FIXED
Product: nautilus
Classification: Core
Component: general
unspecified
Other All
: Normal normal
: ---
Assigned To: Nautilus Maintainers
Nautilus Maintainers
: 774375 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2016-10-25 17:14 UTC by Ernestas Kulik
Modified: 2016-11-13 20:19 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
window: check for an active slot when updating cursor (995 bytes, patch)
2016-10-25 17:14 UTC, Ernestas Kulik
committed Details | Review

Description Ernestas Kulik 2016-10-25 17:14:28 UTC
When updating the cursor, the existence of an active window slot is
assumed when checking if it allows stopping. This can cause a crash if
the last view is closed while it is still loading.
Comment 1 Ernestas Kulik 2016-10-25 17:14:34 UTC
Created attachment 338442 [details] [review]
window: check for an active slot when updating cursor
Comment 2 Ernestas Kulik 2016-10-25 17:17:43 UTC
Not sure how high in the stack it would make most sense, but it works.

  • #0 nautilus_window_slot_get_allow_stop
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window-slot.c line 2915
  • #1 update_cursor
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window.c line 799
  • #2 nautilus_window_sync_allow_stop
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window.c line 856
  • #3 nautilus_window_slot_set_allow_stop
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window-slot.c line 2932
  • #4 end_location_change
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window-slot.c line 1803
  • #5 view_ended_loading
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window-slot.c line 2427
  • #6 view_is_loading_changed_cb
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window-slot.c line 2458
  • #7 g_cclosure_marshal_VOID__PARAM
    at /home/ernestas/jhbuild/checkout/glib/gobject/gmarshal.c line 1832
  • #8 g_closure_invoke
    at /home/ernestas/jhbuild/checkout/glib/gobject/gclosure.c line 804
  • #9 signal_emit_unlocked_R
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3635
  • #10 g_signal_emit_valist
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3391
  • #11 g_signal_emit
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3447
  • #12 g_object_dispatch_properties_changed
    at /home/ernestas/jhbuild/checkout/glib/gobject/gobject.c line 1064
  • #13 g_object_notify_by_spec_internal
    at /home/ernestas/jhbuild/checkout/glib/gobject/gobject.c line 1157
  • #14 g_object_notify
    at /home/ernestas/jhbuild/checkout/glib/gobject/gobject.c line 1205
  • #15 done_loading
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-files-view.c line 3450
  • #16 nautilus_files_view_stop_loading
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-files-view.c line 8277
  • #17 nautilus_files_view_destroy
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-files-view.c line 2975
  • #18 g_cclosure_marshal_VOID__VOID
    at /home/ernestas/jhbuild/checkout/glib/gobject/gmarshal.c line 875
  • #19 g_type_class_meta_marshal
    at /home/ernestas/jhbuild/checkout/glib/gobject/gclosure.c line 997
  • #20 g_closure_invoke
    at /home/ernestas/jhbuild/checkout/glib/gobject/gclosure.c line 804
  • #21 signal_emit_unlocked_R
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3751
  • #22 g_signal_emit_valist
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3391
  • #23 g_signal_emit
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3447
  • #24 gtk_widget_dispose
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkwidget.c line 12059
  • #25 nautilus_list_view_dispose
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-list-view.c line 3259
  • #26 g_object_run_dispose
    at /home/ernestas/jhbuild/checkout/glib/gobject/gobject.c line 1084
  • #27 gtk_widget_destroy
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkwidget.c line 4715
  • #28 nautilus_window_slot_dispose
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window-slot.c line 2655
  • #29 g_object_unref
    at /home/ernestas/jhbuild/checkout/glib/gobject/gobject.c line 3148
  • #30 gtk_container_remove
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkcontainer.c line 1909
  • #31 gtk_notebook_remove_page
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtknotebook.c line 6635
  • #32 close_slot
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window.c line 754
  • #33 nautilus_window_slot_close
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window.c line 1522
  • #34 action_close_current_view
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window.c line 197
  • #35 g_cclosure_marshal_VOID__VARIANT
    at /home/ernestas/jhbuild/checkout/glib/gobject/gmarshal.c line 2140
  • #36 g_closure_invoke
    at /home/ernestas/jhbuild/checkout/glib/gobject/gclosure.c line 804
  • #37 signal_emit_unlocked_R
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3635
  • #38 g_signal_emit_valist
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3391
  • #39 g_signal_emit
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3447
  • #40 g_simple_action_activate
    at /home/ernestas/jhbuild/checkout/glib/gio/gsimpleaction.c line 225
  • #41 g_action_activate
    at /home/ernestas/jhbuild/checkout/glib/gio/gaction.c line 397
  • #42 g_simple_action_group_activate
    at /home/ernestas/jhbuild/checkout/glib/gio/gsimpleactiongroup.c line 138
  • #43 g_action_group_activate_action
    at /home/ernestas/jhbuild/checkout/glib/gio/gactiongroup.c line 595
  • #44 gtk_action_muxer_activate_action
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkactionmuxer.c line 412
  • #45 g_action_group_activate_action
    at /home/ernestas/jhbuild/checkout/glib/gio/gactiongroup.c line 595
  • #46 gtk_action_muxer_activate_action
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkactionmuxer.c line 414
  • #47 g_action_group_activate_action
    at /home/ernestas/jhbuild/checkout/glib/gio/gactiongroup.c line 595
  • #48 gtk_action_muxer_activate_action
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkactionmuxer.c line 414
  • #49 g_action_group_activate_action
    at /home/ernestas/jhbuild/checkout/glib/gio/gactiongroup.c line 595
  • #50 gtk_action_muxer_activate_action
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkactionmuxer.c line 414
  • #51 g_action_group_activate_action
    at /home/ernestas/jhbuild/checkout/glib/gio/gactiongroup.c line 595
  • #52 gtk_action_muxer_activate_action
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkactionmuxer.c line 414
  • #53 g_action_group_activate_action
    at /home/ernestas/jhbuild/checkout/glib/gio/gactiongroup.c line 595
  • #54 gtk_action_muxer_activate_action
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkactionmuxer.c line 414
  • #55 g_action_group_activate_action
    at /home/ernestas/jhbuild/checkout/glib/gio/gactiongroup.c line 595
  • #56 gtk_application_accels_activate
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkapplicationaccels.c line 448
  • #57 gtk_window_activate_key
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkwindow.c line 11799
  • #58 gtk_window_key_press_event
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkwindow.c line 8005
  • #59 nautilus_window_key_press_event
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-window.c line 2543
  • #60 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 131
  • #61 g_type_class_meta_marshalv
    at /home/ernestas/jhbuild/checkout/glib/gobject/gclosure.c line 1024
  • #62 _g_closure_invoke_va
    at /home/ernestas/jhbuild/checkout/glib/gobject/gclosure.c line 867
  • #63 g_signal_emit_valist
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3300
  • #64 g_signal_emit
    at /home/ernestas/jhbuild/checkout/glib/gobject/gsignal.c line 3447
  • #65 gtk_widget_event_internal
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkwidget.c line 7721
  • #66 gtk_widget_event
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkwidget.c line 7291
  • #67 propagate_event
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkmain.c line 2648
  • #68 gtk_propagate_event
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkmain.c line 2692
  • #69 gtk_main_do_event
    at /home/ernestas/jhbuild/checkout/gtk+-3/gtk/gtkmain.c line 1888
  • #70 _gdk_event_emit
    at /home/ernestas/jhbuild/checkout/gtk+-3/gdk/gdkevents.c line 73
  • #71 gdk_event_source_dispatch
    at /home/ernestas/jhbuild/checkout/gtk+-3/gdk/x11/gdkeventsource.c line 367
  • #72 g_main_dispatch
    at /home/ernestas/jhbuild/checkout/glib/glib/gmain.c line 3203
  • #73 g_main_context_dispatch
    at /home/ernestas/jhbuild/checkout/glib/glib/gmain.c line 3856
  • #74 g_main_context_iterate
    at /home/ernestas/jhbuild/checkout/glib/glib/gmain.c line 3929
  • #75 g_main_context_iteration
    at /home/ernestas/jhbuild/checkout/glib/glib/gmain.c line 3990
  • #76 g_application_run
    at /home/ernestas/jhbuild/checkout/glib/gio/gapplication.c line 2381
  • #77 main
    at /home/ernestas/jhbuild/checkout/nautilus/src/nautilus-main.c line 102

Comment 3 Carlos Soriano 2016-10-25 17:44:37 UTC
Review of attachment 338442 [details] [review]:

Oh yeah, not sure why this was an assumption before. Thanks!

::: src/nautilus-window.c
@@ +797,3 @@
     slot = nautilus_window_get_active_slot (window);
 
+    if (slot != NULL &&

although for some time I though "pointer != NULL" was more explicit, it's recommended in the gnu guide (cannot find the reference now) to use if (pointer) instead.
But I like the explicitness, so I I guess this is fine. I have been back and forth on this one for some time now.
Comment 4 Carlos Soriano 2016-10-25 17:46:02 UTC
> 
> although for some time I though "pointer != NULL" was more explicit, it's
> recommended in the gnu guide (cannot find the reference now) to use if
> (pointer) instead.
> But I like the explicitness, so I I guess this is fine. I have been back and
> forth on this one for some time now.

To clarify this is a case whether I'm not sure it is explicitness or redundant, since it's something the C standard supports and documents.
But it's not in other languages, and that makes me lend more to the side of using pointer != NULL although in C it is.
Comment 5 Ernestas Kulik 2016-10-26 05:49:55 UTC
Attachment 338442 [details] pushed as 4b13594 - window: check for an active slot when updating cursor
Comment 6 Ernestas Kulik 2016-11-13 20:19:00 UTC
*** Bug 774375 has been marked as a duplicate of this bug. ***