summaryrefslogtreecommitdiff
path: root/daemon/gvfsdaemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/gvfsdaemon.c')
-rw-r--r--daemon/gvfsdaemon.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/daemon/gvfsdaemon.c b/daemon/gvfsdaemon.c
index c0ac8caf..6cb3341a 100644
--- a/daemon/gvfsdaemon.c
+++ b/daemon/gvfsdaemon.c
@@ -46,6 +46,11 @@ enum {
PROP_0
};
+enum {
+ SHUTDOWN,
+ LAST_SIGNAL
+};
+
typedef struct {
char *obj_path;
GVfsRegisterPathCallback callback;
@@ -86,6 +91,8 @@ typedef struct {
GDBusConnection *conn;
} NewConnectionData;
+static guint signals[LAST_SIGNAL] = { 0 };
+
static void g_vfs_daemon_get_property (GObject *object,
guint prop_id,
GValue *value,
@@ -173,6 +180,15 @@ g_vfs_daemon_class_init (GVfsDaemonClass *klass)
gobject_class->finalize = g_vfs_daemon_finalize;
gobject_class->set_property = g_vfs_daemon_set_property;
gobject_class->get_property = g_vfs_daemon_get_property;
+
+ signals[SHUTDOWN] =
+ g_signal_new ("shutdown",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GVfsDaemonClass, shutdown),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
static void
@@ -344,9 +360,9 @@ g_vfs_daemon_set_max_threads (GVfsDaemon *daemon,
}
static gboolean
-exit_at_idle (gpointer data)
+exit_at_idle (GVfsDaemon *daemon)
{
- exit (0);
+ g_signal_emit (daemon, signals[SHUTDOWN], 0);
return FALSE;
}
@@ -364,7 +380,7 @@ static void
daemon_schedule_exit (GVfsDaemon *daemon)
{
if (daemon->exit_tag == 0)
- daemon->exit_tag = g_timeout_add_seconds (1, exit_at_idle, daemon);
+ daemon->exit_tag = g_timeout_add_seconds (1, (GSourceFunc)exit_at_idle, daemon);
}
static void