From 0a2d3954ffaf06b9450966b95b3732c9f7eb532a Mon Sep 17 00:00:00 2001 From: Martin Wilke Date: Mon, 4 Dec 2006 22:29:46 +0000 Subject: - Update to 1.7 PR: ports/106344 Submitted by: Anish Mistry (maintainer) --- sysutils/fusefs-sshfs/files/patch-sshfs.c | 64 +++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 sysutils/fusefs-sshfs/files/patch-sshfs.c (limited to 'sysutils/fusefs-sshfs/files') 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 -- cgit v1.2.3