GNOME Bugzilla – Bug 756253
Hits assert "file->details->directory == directory" when moving directory
Last modified: 2015-12-14 18:48:35 UTC
The bug is quite easy to trigger using the steps described on https://bugzilla.redhat.com/show_bug.cgi?id=1218035 "1: Use Nautilus to create a new directory (filesystem or location do not seem to matter, but I tested it with ~/Downloads on BTRFS) enter the folder and create another one inside it. 2: Go back to the start directory and use the move-to function to move the new folders to another location (I chose ~/Documents). 3: Nautilus has a high probability of crashing as soon as the move-to action is confirmed."
stacktrace "#0 0x00007f61f042ca98 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:55 resultvar = 0 pid = 27764 selftid = 27764
+ Trace 235555
(nautilus 3.16.2)
that's still an issue with 3.18
Ubuntu report on https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/1434573
Created attachment 317388 [details] [review] directory-async: set NULL the count progress on cancel When a file gets moved, nautilus directory cancel the loading of the attributes of that file, in case that file is in the work queue of that directory, since it will move to another directory. For that, we cancel the cancellable associated to the async request of the attributes of that file. However, since this is threaded, if some client of the directory kick of I/O with the nautilus_directory_async_state_changed and the cancellable didn't reach the callback, the file attributes are still going on, and we reach an assert when trying to stop them again, since the file requesting for those attributes is no longer the one we want to stop loading. This was causing problems when the race kicks in, for example, the move to context menu action. To fix it, apart of cancel the cancellable associated, set the directory private data files as null, to avoid trying to stop the already stopped request.
Thanks Cosimo for review on IRC. Attachment 317388 [details] pushed as 764958a - directory-async: set NULL the count progress on cancel