summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2020-09-08 17:33:28 +0200
committerOndrej Holy <oholy@redhat.com>2020-09-08 17:33:28 +0200
commitd5b837aa366af8d56465e4a4686781ced87fe5a2 (patch)
treeeeb0db946e6c9cd00c6807352549428d47b07e23
parent6324a52e63a32f35658f81303f9d3ed570141ae4 (diff)
downloadgvfs-wip/oholy/trash-deadlock.tar.gz
trash: Explicitly cancel file monitor to prevent deadlockwip/oholy/trash-deadlock
It seems that if file monitor is not canceled before unreffing, it can cause deadlock. Let's explicitly cancel it before unreffing to prevent this. See https://gitlab.gnome.org/GNOME/glib/-/issues/1941. Fixes: https://gitlab.gnome.org/GNOME/gvfs/-/issues/485
-rw-r--r--daemon/trashlib/dirwatch.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/daemon/trashlib/dirwatch.c b/daemon/trashlib/dirwatch.c
index f2bc6924..6a2f1f6f 100644
--- a/daemon/trashlib/dirwatch.c
+++ b/daemon/trashlib/dirwatch.c
@@ -216,6 +216,7 @@ dir_watch_recursive_destroy (gpointer user_data)
watch->state = FALSE;
}
+ g_file_monitor_cancel (watch->parent_monitor);
g_object_unref (watch->parent_monitor);
watch->parent_monitor = NULL;
}
@@ -271,7 +272,10 @@ dir_watch_free (DirWatch *watch)
if (watch != NULL)
{
if (watch->parent_monitor)
- g_object_unref (watch->parent_monitor);
+ {
+ g_file_monitor_cancel (watch->parent_monitor);
+ g_object_unref (watch->parent_monitor);
+ }
g_object_unref (watch->directory);
g_object_unref (watch->topdir);