diff options
author | Ondrej Holy <oholy@redhat.com> | 2020-09-08 17:33:28 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2020-09-08 17:33:28 +0200 |
commit | d5b837aa366af8d56465e4a4686781ced87fe5a2 (patch) | |
tree | eeb0db946e6c9cd00c6807352549428d47b07e23 | |
parent | 6324a52e63a32f35658f81303f9d3ed570141ae4 (diff) | |
download | gvfs-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.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); |