From e078f0e75203969ef4c7bcbc61bd935d65316cc9 Mon Sep 17 00:00:00 2001 From: Christian Kellner Date: Sun, 5 Jun 2011 12:57:02 +0200 Subject: daemon: Add logic to force close active channels This includes logic in a GVfsChannel to force close is as well as a function in the GVfsDaemon to iterate over all active channels and call the force-close function. --- daemon/gvfschannel.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'daemon/gvfschannel.c') diff --git a/daemon/gvfschannel.c b/daemon/gvfschannel.c index b5e3d6a7..931a857d 100644 --- a/daemon/gvfschannel.c +++ b/daemon/gvfschannel.c @@ -750,3 +750,32 @@ g_vfs_channel_get_actual_consumer (GVfsChannel *channel) return channel->priv->actual_consumer; } +static void +free_queued_requests (gpointer data) +{ + Request *req = (Request *) data; + + g_free (req->data); + g_free (req); +} + +void +g_vfs_channel_force_close (GVfsChannel *channel) +{ + GVfsJob *job; + gint fd; + + fd = g_unix_input_stream_get_fd (G_UNIX_INPUT_STREAM (channel->priv->command_stream)); + + shutdown (fd, SHUT_RDWR); + + job = channel->priv->current_job; + + if (job) + g_vfs_job_cancel (job); + + g_list_free_full (channel->priv->queued_requests, free_queued_requests); + channel->priv->queued_requests = NULL; + + g_vfs_job_source_closed (G_VFS_JOB_SOURCE (channel)); +} -- cgit v1.2.1