summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Petter Jansson <hpj@novell.com>2008-05-21 21:06:24 +0000
committerHans Petter <hansp@src.gnome.org>2008-05-21 21:06:24 +0000
commit5086dd77de212a495e3261b70167712312c11ff1 (patch)
treefe68b83768e040f0fc3623f6b8b0351c92ee095b
parent55ab9e2ab410b784583940a2eeedff84a49ddf29 (diff)
downloadgvfs-5086dd77de212a495e3261b70167712312c11ff1.tar.gz
When the process receives one of the HUP, TERM or INT signals, shut down
2008-05-22 Hans Petter Jansson <hpj@novell.com> * client/gvfsfusedaemon.c (shutown_on_idle) (shutdown_signal) (vfs_init): When the process receives one of the HUP, TERM or INT signals, shut down gracefully. Fixes GNOME bug #531516. svn path=/trunk/; revision=1775
-rw-r--r--ChangeLog7
-rw-r--r--client/gvfsfusedaemon.c17
2 files changed, 24 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index ea81d6bf..d17693e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-05-22 Hans Petter Jansson <hpj@novell.com>
+
+ * client/gvfsfusedaemon.c (shutown_on_idle)
+ (shutdown_signal)
+ (vfs_init): When the process receives one of the HUP, TERM or
+ INT signals, shut down gracefully. Fixes GNOME bug #531516.
+
2008-05-21 Tomas Bzatek <tbzatek@redhat.com>
* daemon/gvfsbackendsmb.c: (do_mount):
diff --git a/client/gvfsfusedaemon.c b/client/gvfsfusedaemon.c
index 6ccb10da..7d17ca43 100644
--- a/client/gvfsfusedaemon.c
+++ b/client/gvfsfusedaemon.c
@@ -2049,6 +2049,18 @@ dbus_filter_func (DBusConnection *connection,
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
+static gboolean
+shutdown_on_idle (void)
+{
+ fuse_exit (fuse_get_context ()->fuse);
+ return FALSE;
+}
+
+static void
+shutdown_signal (gint signum)
+{
+ g_idle_add ((GSourceFunc) shutdown_on_idle, NULL);
+}
static gpointer
vfs_init (struct fuse_conn_info *conn)
@@ -2102,6 +2114,11 @@ vfs_init (struct fuse_conn_info *conn)
volume_monitor = g_object_new (g_type_from_name ("GDaemonVolumeMonitor"), NULL);
subthread_main_loop = g_main_loop_new (NULL, FALSE);
+
+ signal (SIGHUP, shutdown_signal);
+ signal (SIGTERM, shutdown_signal);
+ signal (SIGINT, shutdown_signal);
+
subthread = g_thread_create ((GThreadFunc) subthread_main, NULL, FALSE, NULL);
return NULL;