diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | client/gvfsfusedaemon.c | 9 |
2 files changed, 14 insertions, 1 deletions
@@ -1,3 +1,9 @@ +2008-07-18 Hans Petter Jansson <hpj@novell.com> + + * client/gvfsfusedaemon.c (vfs_open) + (vfs_create): Hold the file handle lock while opening the stream. + Second part of fix for #536614. + 2008-07-17 Hans Petter Jansson <hpj@novell.com> * client/gvfsfusedaemon.c (reindex_file_handle_for_path): Steal the diff --git a/client/gvfsfusedaemon.c b/client/gvfsfusedaemon.c index bc70b53c..65720539 100644 --- a/client/gvfsfusedaemon.c +++ b/client/gvfsfusedaemon.c @@ -959,11 +959,15 @@ vfs_open (const gchar *path, struct fuse_file_info *fi) /* Set up a stream here, so we can check for errors */ + g_mutex_lock (fh->mutex); + if (fi->flags & O_WRONLY || fi->flags & O_RDWR) result = setup_output_stream (file, fh); else result = setup_input_stream (file, fh); + g_mutex_unlock (fh->mutex); + /* The added reference to the file handle is released in vfs_release() */ } else if (file_type == G_FILE_TYPE_DIRECTORY) @@ -1047,11 +1051,14 @@ vfs_create (const gchar *path, mode_t mode, struct fuse_file_info *fi) SET_FILE_HANDLE (fi, fh); - g_assert (fh->stream == NULL); + g_mutex_lock (fh->mutex); + file_handle_close_stream (fh); fh->stream = file_output_stream; fh->op = FILE_OP_WRITE; + g_mutex_unlock (fh->mutex); + /* The added reference to the file handle is released in vfs_release() */ } else |