diff options
author | Ondrej Holy <oholy@redhat.com> | 2020-09-08 17:33:28 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2020-12-11 12:58:49 +0000 |
commit | dc21a0948bcbe8a6d79d674bd1e4d63ded57d340 (patch) | |
tree | 81b50ec145dc35a9b9bb159134acad5e9089f07e /daemon | |
parent | 87e8188af60d335582c2c69d23ace2cdc59fa656 (diff) | |
download | gvfs-dc21a0948bcbe8a6d79d674bd1e4d63ded57d340.tar.gz |
trash: Explicitly cancel file monitor to prevent 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
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/trashlib/dirwatch.c | 6 |
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); |