diff options
author | Martin Wilke <miwi@FreeBSD.org> | 2006-12-04 22:29:46 +0000 |
---|---|---|
committer | Martin Wilke <miwi@FreeBSD.org> | 2006-12-04 22:29:46 +0000 |
commit | 0a2d3954ffaf06b9450966b95b3732c9f7eb532a (patch) | |
tree | f6a4bec78db5211f7df89d44b27c418a1472d570 /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.c | 64 |
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 |