summaryrefslogtreecommitdiff
path: root/sysutils/fusefs-sshfs/files
diff options
context:
space:
mode:
authorMartin Wilke <miwi@FreeBSD.org>2006-12-04 22:29:46 +0000
committerMartin Wilke <miwi@FreeBSD.org>2006-12-04 22:29:46 +0000
commit0a2d3954ffaf06b9450966b95b3732c9f7eb532a (patch)
treef6a4bec78db5211f7df89d44b27c418a1472d570 /sysutils/fusefs-sshfs/files
parent- Update to 20061204 (diff)
- Update to 1.7
PR: ports/106344 Submitted by: Anish Mistry <amistry@am-productions.biz> (maintainer)
Notes
Notes: svn path=/head/; revision=178890
Diffstat (limited to 'sysutils/fusefs-sshfs/files')
-rw-r--r--sysutils/fusefs-sshfs/files/patch-sshfs.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/sysutils/fusefs-sshfs/files/patch-sshfs.c b/sysutils/fusefs-sshfs/files/patch-sshfs.c
new file mode 100644
index 000000000000..825af6035b37
--- /dev/null
+++ b/sysutils/fusefs-sshfs/files/patch-sshfs.c
@@ -0,0 +1,64 @@
+--- sshfs.c.orig Fri Aug 18 10:38:37 2006 +0000
++++ sshfs.c Fri Sep 29 14:22:54 2006 +0000
+@@ -147,6 +147,7 @@ struct sshfs_file {
+ int is_seq;
+ int connver;
+ int modifver;
++ int refs;
+ };
+
+ struct sshfs {
+@@ -1768,6 +1769,7 @@ static int sshfs_open_common(const char
+ pthread_cond_init(&sf->write_finished, NULL);
+ /* Assume random read after open */
+ sf->is_seq = 0;
++ sf->refs = 1;
+ sf->next_pos = 0;
+ sf->modifver= sshfs.modifver;
+ sf->connver = sshfs.connver;
+@@ -1851,6 +1853,19 @@ static int sshfs_fsync(const char *path,
+ return sshfs_flush(path, fi);
+ }
+
++static void sshfs_file_put(struct sshfs_file *sf)
++{
++ sf->refs--;
++ if (!sf->refs)
++ g_free(sf);
++}
++
++static struct sshfs_file *sshfs_file_get(struct sshfs_file *sf)
++{
++ sf->refs++;
++ return sf;
++}
++
+ static int sshfs_release(const char *path, struct fuse_file_info *fi)
+ {
+ struct sshfs_file *sf = get_sshfs_file(fi);
+@@ -1861,7 +1876,7 @@ static int sshfs_release(const char *pat
+ }
+ buf_free(handle);
+ chunk_put_locked(sf->readahead);
+- g_free(sf);
++ sshfs_file_put(sf);
+ return 0;
+ }
+
+@@ -2084,6 +2099,7 @@ static void sshfs_write_end(struct reque
+ }
+ list_del(&req->list);
+ pthread_cond_broadcast(&sf->write_finished);
++ sshfs_file_put(sf);
+ }
+
+ static int sshfs_write(const char *path, const char *wbuf, size_t size,
+@@ -2110,7 +2126,7 @@ static int sshfs_write(const char *path,
+ iov[1].iov_len = size;
+ if (!sshfs.sync_write && !sf->write_error)
+ err = sftp_request_send(SSH_FXP_WRITE, iov, 2, sshfs_write_begin,
+- sshfs_write_end, 0, sf, NULL);
++ sshfs_write_end, 0, sshfs_file_get(sf), NULL);
+ else
+ err = sftp_request_iov(SSH_FXP_WRITE, iov, 2, SSH_FXP_STATUS, NULL);
+ buf_free(&buf); \ No newline at end of file