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 517026 - crash in Open Folder: Deleting the last file i...
crash in Open Folder: Deleting the last file i...
Status: RESOLVED OBSOLETE
Product: gtk+
Classification: Platform
Component: Accessibility
unspecified
Other All
: Normal major
: ---
Assigned To: gtk-bugs
gtk-bugs
Depends on:
Blocks:
 
 
Reported: 2008-02-17 17:09 UTC by Willie Walker
Modified: 2018-04-14 23:59 UTC
See Also:
GNOME target: ---
GNOME version: 2.19/2.20


Attachments
Orca debug.out generated whilst testing this. (114.50 KB, text/plain)
2008-02-19 16:09 UTC, Rich Burridge
  Details
Patch to potentially fix the problem. (495 bytes, patch)
2008-02-19 16:24 UTC, Rich Burridge
committed Details | Review
Orca debug log generated after testing the "defunct" patch. (123.22 KB, text/plain)
2008-02-19 16:27 UTC, Rich Burridge
  Details

Description Willie Walker 2008-02-17 17:09:34 UTC
Version: 2.20.0

What were you doing when the application crashed?
Deleting the last file in a directory while Orca was running.


Distribution:                 Solaris Express Developer Edition 1/08 snv_79b X86
Gnome Release: 2.20.1 2007-11-19 (Sun Microsystems, Inc.)
BugBuddy Version: 2.20.1

X Vendor: Sun Microsystems, Inc.
X Vendor Release: 10300000
Selinux: No
Accessibility: Enabled
GTK+ Theme: nimbus
Icon Theme: nimbus

Memory status: size: 107048960 vsize: 107048960 resident: 32620544 share: 786432 rss: 32620544 rss_rlim: 0
CPU usage: start_time: 0 rtime: 365 utime: 3273025 stime: 377372 cutime:0 cstime: 0 timeout: 0 it_real_value: 0 frequency: 0

Backtrace was generated from '/usr/bin/nautilus'

(no debugging symbols found)
sol-thread active.
Retry #1:
Retry #2:
Retry #3:
Retry #4:
[New LWP    1        ]
[New Thread 1 (LWP 1)]

Thread 1 (LWP 1)

  • #0 _waitid
    from /lib/libc.so.1
  • #1 _waitpid
    from /lib/libc.so.1
  • #2 waitpid_cancel
    from /lib/libc.so.1
  • #3 g_spawn_sync
    from /usr/lib/libglib-2.0.so.0
  • #4 g_spawn_command_line_sync
    from /usr/lib/libglib-2.0.so.0
  • #5 __1cNrun_bug_buddy6Fpkclp0_b_
    from /usr/lib/gtk-2.0/modules/libgnomebreakpad.so
  • #6 __1cMcheck_if_gdb6Fpv_b_
    from /usr/lib/gtk-2.0/modules/libgnomebreakpad.so
  • #7 _ex_text0
    from /usr/lib/gtk-2.0/modules/libgnomebreakpad.so
  • #8 sigfatal_handler
  • #9 __sighndlr
    from /lib/libc.so.1
  • #10 call_user_handler
    from /lib/libc.so.1
  • #11 <signal handler called>
  • #12 fm_list_model_iter_parent
  • #13 gtk_tree_model_iter_parent
    from /usr/lib/libgtk-x11-2.0.so.0
  • #14 return_iter_nth_row
    at gailtreeview.c line 3453
  • #15 set_iter_nth_row
    at gailtreeview.c line 3307
  • #16 get_row_info
    at gailtreeview.c line 1929
  • #17 gail_tree_view_get_row_description
    at gailtreeview.c line 1749
  • #18 atk_table_get_row_description
    at atktable.c line 418
  • #19 impl_getRowDescription
    at table.c line 177
  • #20 _ORBIT_skel_small_Accessibility_Table_getRowDescription
    at Accessibility-common.c line 632
  • #21 ORBit_POAObject_invoke
    from /usr/lib/libORBit-2.so.0
  • #22 ORBit_OAObject_invoke
    from /usr/lib/libORBit-2.so.0
  • #23 ORBit_small_invoke_adaptor
    from /usr/lib/libORBit-2.so.0
  • #24 ORBit_POAObject_handle_request
    from /usr/lib/libORBit-2.so.0
  • #25 ORBit_POAObject_invoke_incoming_request
    from /usr/lib/libORBit-2.so.0
  • #26 ORBit_POA_handle_request
    from /usr/lib/libORBit-2.so.0
  • #27 ORBit_handle_request
    from /usr/lib/libORBit-2.so.0
  • #28 giop_connection_handle_input
    from /usr/lib/libORBit-2.so.0
  • #29 link_connection_io_handler
    from /usr/lib/libORBit-2.so.0
  • #30 link_source_dispatch
    from /usr/lib/libORBit-2.so.0
  • #31 g_main_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #32 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #33 g_main_context_iterate
    from /usr/lib/libglib-2.0.so.0
  • #34 g_main_context_iteration
    from /usr/lib/libglib-2.0.so.0
  • #35 link_main_iteration
    from /usr/lib/libORBit-2.so.0
  • #36 giop_recv_buffer_get
    from /usr/lib/libORBit-2.so.0
  • #37 ORBit_small_invoke_stub
    from /usr/lib/libORBit-2.so.0
  • #38 ORBit_small_invoke_stub_n
    from /usr/lib/libORBit-2.so.0
  • #39 ORBit_c_stub_invoke
    from /usr/lib/libORBit-2.so.0
  • #40 Accessibility_EventListener_notifyEvent
    at Accessibility-stubs.c line 422
  • #41 spi_atk_emit_eventv
    at bridge.c line 797
  • #42 spi_atk_bridge_property_event_listener
    at bridge.c line 970
  • #43 signal_emit_unlocked_R
    from /usr/lib/libgobject-2.0.so.0
  • #44 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #45 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #46 atk_object_notify
    at atkobject.c line 1346
  • #47 g_cclosure_marshal_VOID__PARAM
    from /usr/lib/libgobject-2.0.so.0
  • #48 g_type_class_meta_marshal
    from /usr/lib/libgobject-2.0.so.0
  • #49 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #50 signal_emit_unlocked_R
    from /usr/lib/libgobject-2.0.so.0
  • #51 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #52 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #53 g_object_dispatch_properties_changed
    from /usr/lib/libgobject-2.0.so.0
  • #54 g_object_notify_dispatcher
    from /usr/lib/libgobject-2.0.so.0
  • #55 g_object_notify_queue_thaw
    from /usr/lib/libgobject-2.0.so.0
  • #56 g_object_notify
    from /usr/lib/libgobject-2.0.so.0
  • #57 gail_paned_size_allocate_gtk
    at gailpaned.c line 149
  • #58 g_cclosure_marshal_VOID__BOXED
    from /usr/lib/libgobject-2.0.so.0
  • #59 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #60 signal_emit_unlocked_R
    from /usr/lib/libgobject-2.0.so.0
  • #61 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #62 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #63 gtk_widget_size_allocate
    from /usr/lib/libgtk-x11-2.0.so.0
  • #64 gtk_table_size_allocate_pass2
    from /usr/lib/libgtk-x11-2.0.so.0
  • #65 gtk_table_size_allocate
    from /usr/lib/libgtk-x11-2.0.so.0
  • #66 g_cclosure_marshal_VOID__BOXED
    from /usr/lib/libgobject-2.0.so.0
  • #67 g_type_class_meta_marshal
    from /usr/lib/libgobject-2.0.so.0
  • #68 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #69 signal_emit_unlocked_R
    from /usr/lib/libgobject-2.0.so.0
  • #70 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #71 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #72 gtk_widget_size_allocate
    from /usr/lib/libgtk-x11-2.0.so.0
  • #73 gtk_window_size_allocate
    from /usr/lib/libgtk-x11-2.0.so.0
  • #74 g_cclosure_marshal_VOID__BOXED
    from /usr/lib/libgobject-2.0.so.0
  • #75 g_type_class_meta_marshal
    from /usr/lib/libgobject-2.0.so.0
  • #76 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #77 signal_emit_unlocked_R
    from /usr/lib/libgobject-2.0.so.0
  • #78 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #79 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #80 gtk_widget_size_allocate
    from /usr/lib/libgtk-x11-2.0.so.0
  • #81 gtk_container_resize_children
    from /usr/lib/libgtk-x11-2.0.so.0
  • #82 gtk_window_move_resize
    from /usr/lib/libgtk-x11-2.0.so.0
  • #83 gtk_window_check_resize
    from /usr/lib/libgtk-x11-2.0.so.0
  • #84 g_cclosure_marshal_VOID__VOID
    from /usr/lib/libgobject-2.0.so.0
  • #85 g_type_class_meta_marshal
    from /usr/lib/libgobject-2.0.so.0
  • #86 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #87 signal_emit_unlocked_R
    from /usr/lib/libgobject-2.0.so.0
  • #88 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #89 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #90 gtk_container_check_resize
    from /usr/lib/libgtk-x11-2.0.so.0
  • #91 gtk_container_idle_sizer
    from /usr/lib/libgtk-x11-2.0.so.0
  • #92 gdk_threads_dispatch
    from /usr/lib/libgdk-x11-2.0.so.0
  • #93 g_idle_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #94 g_main_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #95 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #96 g_main_context_iterate
    from /usr/lib/libglib-2.0.so.0
  • #97 g_main_loop_run
    from /usr/lib/libglib-2.0.so.0
  • #98 gtk_main
    from /usr/lib/libgtk-x11-2.0.so.0
  • #99 main
Thread 1 (LWP    1        ):
#-1 0xcfee3f85 in _waitid () from /lib/libc.so.1
No symbol table info available.
#-1 0xcfee3f85 in _waitid () from /lib/libc.so.1
Comment 1 Willie Walker 2008-02-17 17:17:18 UTC
The relevant nautilus settings that differ from the default seem to be this:

Edit->Preferences->Behavior:

  [ ] Ask before emptying the Trash or deleting files
  [x] Include a Delete command that bypasses Trash

View->View as List

I then went to a directory and pressed Shift+F10 followed by 'D' to delete each file while Orca was running.  On the last file, Nautilus crashed and bug buddy appeared.

This looks like it might be a gail issue -- Li, what do you think?
Comment 2 Li Yuan 2008-02-18 05:41:52 UTC
Seems Orca called Accessibility_Table_getRowDescription with row number=-1. I think a check needs to be added in gail or atk. And also we can take a look at Orca's code why the "-1" call happens, what is Orca really want to get?
Comment 3 Willie Walker 2008-02-18 14:42:13 UTC
(In reply to comment #2)
> Seems Orca called Accessibility_Table_getRowDescription with row number=-1. I
> think a check needs to be added in gail or atk. And also we can take a look at
> Orca's code why the "-1" call happens, what is Orca really want to get?
> 

Eeeks.  This isn't good.  Rich, can you take a look at this (please)?  It may be that all we need to do is add checks in default.py:locusOfFocusChanged to make sure the index being passed into getRowDescription and getColumnDescription are >= 0.
Comment 4 Rich Burridge 2008-02-19 16:09:41 UTC
Created attachment 105583 [details]
Orca debug.out generated whilst testing this.

I created a directory called "testarea" and put three empty files in it with:

$ mkdir testarea
$ touch file1 file2 file3

I then followed the steps in comment #1. I also added some debug print
statements to the locusOfFocusChanged() method in default.py in Orca.

Orca debug log attached. When I pressed Shift-F10, "d", Tab to delete the
last file, we get an "object:active-descendant-changed" at line 2528.
This called locusOfFocusChanged (line 2542), and I print the details of
the new locus of focus (line 2543):

newLocusOfFocus:  app.name='nautilus' name='None' role='table cell' state='active defunct enabled focusable focused selectable sensitive showing transient visible' relations='node child of'

Further down the locusOfFocusChanged() method there is indeed a call to:
desc = table.getRowDescription(newRow)
with a row number of -1 (line 2583).

But what's more interesting is that one of the states for this new locus
of focus is "defunct". We certainly could put in some checks to make sure
we aren't trying to get a row description for a row of -1, but wouldn't
it be better if locusOfFocusChanged() just returned if the new locus of
focus has a "defunct" state?
Comment 5 Rich Burridge 2008-02-19 16:10:42 UTC
Oh, I should add at the end there, both Orca and nautilus are non-responsive.
Comment 6 Rich Burridge 2008-02-19 16:24:54 UTC
Created attachment 105584 [details] [review]
Patch to potentially fix the problem.

This patch adds a check to the start of the locusOfFocusChanged()
method in default.py to just return if the new locus of focus has
a "defunct" state.

Seems to work nicely for me. New debug.out to follow.
Comment 7 Rich Burridge 2008-02-19 16:27:06 UTC
Created attachment 105585 [details]
Orca debug log generated after testing the "defunct" patch.

You'll note that for each of the three times that locusOfFocusChanged()
is called after we've deleted a file, that the new locus of focus has
a "defunct" state (lines 1066, 1823 and 2590).
Comment 8 Willie Walker 2008-02-19 18:31:07 UTC
(In reply to comment #7)
> Created an attachment (id=105585) [edit]
> Orca debug log generated after testing the "defunct" patch.
> 
> You'll note that for each of the three times that locusOfFocusChanged()
> is called after we've deleted a file, that the new locus of focus has
> a "defunct" state (lines 1066, 1823 and 2590).
> 

This seems to nicely fix the problem in Orca, so I think you should check that in (thanks!).  I think we should still leave this open, however, and in atk for Li as a reminder to add some condition checking.  Since we've worked around it, though, we can lower the priority of this bug.
Comment 9 Rich Burridge 2008-02-19 18:43:34 UTC
Orca change committed to SVN trunk.
Comment 10 Li Yuan 2008-02-28 07:26:46 UTC
I'd like to downgrade the bug, because there are so many functions that need to add condition check. And actually the crash happens in gtk+, seems they don't have condition check too.
Comment 11 Steve Holmes 2008-03-19 02:26:53 UTC
It still breaks for me.  I'm using Slackware 12.0, Dropline-Gnome 2.20.0 with latest upgrade to date which includes Nautilus 2.20.0.  I am using latest trunk of Orca, at-spi, atk and gail as of 03/17/2008.  I do the following and it crashes with complete loss of speech and inability to log off gnome.  I have to ctrl-alt-backspace to exit gnome and I then get back in by typing startx from a text console.
1. create a directory in my home folder called test_folder.
2. create several files inside that folder: file1, file2, file3; I used touch command to do this.
3. Navigate with file browser in list view to test_folder.
4. Open test_folder.
5. Start deleting each file one by 1 by pressing shift DEL.  I have the full delete turned on in preferences as well as the confirmation prompt.
6. press space bar to confirm each delete.
7. Upon deleting and confirming the final delete (file3), I hear the click from hitting space bar to answer final prompt and I at that point lose speech completely.
8. After this, I cannot logout of gnome.  I get as far as hitting space bar on the confirmation dialog to logout (with no speech of course) but it doesn't log me out.  I have no idea if there is a hanging prompt or what.  I end up using ctrl-alt-backspace to get me out.  This has never worked right for me when the folder becomes empty from last deletion.

Oh, I should also note that I have the checkbox set for behavior to allow separate windows for each folder in case that matters.
Comment 12 Li Yuan 2008-03-19 03:25:27 UTC
I can not reproduce this on my box. Nautilus didn't crash. Maybe some other application hang?
BTW, I have problem to select the last file in the folder, it got the broken line box, but never highlighted. I have to select it by mouse. Is it a known bug?
Comment 13 Rich Burridge 2008-03-19 14:42:46 UTC
> BTW, I have problem to select the last file in the folder, it got the broken
> line box, but never highlighted. I have to select it by mouse. Is it a known
> bug?

That means it's focused but not selected. Pressing Control-Space should 
select it.

Steve discussed this on the Orca mailing list. I get the same results as you.
See:

http://mail.gnome.org/archives/orca-list/2008-March/msg00508.html
Comment 14 Steve Holmes 2008-03-20 04:51:22 UTC
I did some more testing and I will elaborate as follows:
First test: 1. went into a terminal and went into my test folder and did a "touch file1 file2 file3" to give me 3 files.
2. opened up Nautilus to my home folder and navigated down to test_folder and pressed enter to select it.
3. Arrowed up and down the list to verify file presence and then began deleting with shift DEL and confirming the delete prompt with space bar.
4. after deleting 3rd and final file, lost everything like before.
I should note on this last file, I arrowed up and down the list and heard nothing; I usually never do on the single entry like that.  I could arrow right and left to hear items in the table that way.  Pressing ctrl-space said "Unselected" the first time pressed; second time said "Selected" and kept toggling accordingly.  I left it as "Selected" and then did the delete and lost it.

Second test:
1. Set everything up like the first time but when I reached the last file, I pressed Shift-DEL and got the dialog; I then alt-tabbed to something else like the terminal or anotherr file browser window or whatever, then alt-tabbed back to this folder with the confirm dialog still sitting there.  Then hit space bar to accept and focus remained in the empty folder and I did *NOT* lose Orca.
Comment 15 Steve Holmes 2008-03-21 02:27:21 UTC
I did more testing on this with the same configuration in my test_folder.  But I repeated the test I most recently did and I lost Orca again.  What seems to be more consistent is to alt-tab away from the folder contain a single entry and then come back in and *DO NOT* press any other keys except for the shift-delete key and answer the confirm dialog.  If I do it this way, I don't lose speech and I've been able to do this several times in a row. I also did a test this morning where I quit Orca and then deleted the last entry in the folder and then restarted Orca afterwards and all was fine so that tells me that the problem is in Orca for sure.  There is obviously a major focus issue here though because each time I delete a file and confirm deletion, speech stops before speaking the current selection and I don't hear anything until I arrow to another file in the list.
Comment 16 Matthias Clasen 2018-02-10 04:55:25 UTC
We're moving to gitlab! As part of this move, we are moving bugs to NEEDINFO if they haven't seen activity in more than a year. If this issue is still important to you and still relevant with GTK+ 3.22 or master, please reopen it and we will migrate it to gitlab.
Comment 17 Matthias Clasen 2018-04-14 23:59:16 UTC
As announced a while ago, we are migrating to gitlab, and bugs that haven't seen activity in the last year or so will be not be migrated, but closed out in bugzilla.

If this bug is still relevant to you, you can open a new issue describing the symptoms and how to reproduce it with gtk 3.22.x or master in gitlab:

https://gitlab.gnome.org/GNOME/gtk/issues/new