gvfs r1679 - in trunk: . daemon



Author: carlosgc
Date: Tue Mar 25 17:35:33 2008
New Revision: 1679
URL: http://svn.gnome.org/viewvc/gvfs?rev=1679&view=rev

Log:
2008-03-25  Carlos Garcia Campos  <carlosgc gnome org>

	* daemon/gvfschannel.c: (got_request), (send_reply_cb):
	Do not create new read/write jobs if the gvfschannel has been
	cancelled. Fixes a crash in sftp backend (#522192).


Modified:
   trunk/ChangeLog
   trunk/daemon/gvfschannel.c

Modified: trunk/daemon/gvfschannel.c
==============================================================================
--- trunk/daemon/gvfschannel.c	(original)
+++ trunk/daemon/gvfschannel.c	Tue Mar 25 17:35:33 2008
@@ -84,6 +84,7 @@
   GInputStream *command_stream;
   GOutputStream *reply_stream;
   int remote_fd;
+  gboolean cancelled;
   
   GVfsBackendHandle backend_handle;
   GVfsJob *current_job;
@@ -340,7 +341,8 @@
   command = g_ntohl (request->command);
   arg1 = g_ntohl (request->arg1);
 
-  if (command == G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL)
+  if (command == G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_CANCEL ||
+      channel->priv->cancelled)
     {
       if (arg1 == channel->priv->current_job_seq_nr &&
 	  channel->priv->current_job != NULL)
@@ -364,6 +366,8 @@
 	    }
 	}
 
+      channel->priv->cancelled = TRUE;
+      
       /* Cancel ops get no return */
       g_free (data);
       return;
@@ -604,7 +608,8 @@
       g_vfs_job_source_new_job (G_VFS_JOB_SOURCE (channel), channel->priv->current_job);
     }
   /* Start queued request or readahead */
-  else if (!start_queued_request (channel) &&
+  else if (!channel->priv->cancelled &&
+	   !start_queued_request (channel) &&
 	   class->readahead)
     {
       /* No queued requests, maybe we want to do a readahead call */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]