aboutsummaryrefslogtreecommitdiff
path: root/lib/fuse_loop_mt.c
diff options
context:
space:
mode:
authorGravatar Joseph Dodge <joseph.dodge@veritas.com>2017-08-24 14:37:10 +0200
committerGravatar Nikolaus Rath <Nikolaus@rath.org>2017-08-24 15:17:01 +0200
commitf12d9686d4d673e59b8f561c49996820763220b1 (patch)
treea06f9f3941f2abe727eb06f5ff1ec70972498208 /lib/fuse_loop_mt.c
parentfc83143867a37e34a51ce5a6d763b46715abf02d (diff)
Add idle_threads mount option.
Diffstat (limited to 'lib/fuse_loop_mt.c')
-rw-r--r--lib/fuse_loop_mt.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/lib/fuse_loop_mt.c b/lib/fuse_loop_mt.c
index 74b6c99..904539e 100644
--- a/lib/fuse_loop_mt.c
+++ b/lib/fuse_loop_mt.c
@@ -48,6 +48,7 @@ struct fuse_mt {
int exit;
int error;
int clone_fd;
+ int max_idle;
};
static struct fuse_chan *fuse_chan_new(int fd)
@@ -161,7 +162,7 @@ static void *fuse_do_work(void *data)
pthread_mutex_lock(&mt->lock);
if (!isforget)
mt->numavail++;
- if (mt->numavail > 10) {
+ if (mt->numavail > mt->max_idle) {
if (mt->exit) {
pthread_mutex_unlock(&mt->lock);
return NULL;
@@ -300,7 +301,9 @@ static void fuse_join_worker(struct fuse_mt *mt, struct fuse_worker *w)
free(w);
}
-int fuse_session_loop_mt(struct fuse_session *se, int clone_fd)
+int fuse_session_loop_mt_32(struct fuse_session *se, struct fuse_loop_config *config);
+FUSE_SYMVER(".symver fuse_session_loop_mt_32,fuse_session_loop_mt@@FUSE_3.2");
+int fuse_session_loop_mt_32(struct fuse_session *se, struct fuse_loop_config *config)
{
int err;
struct fuse_mt mt;
@@ -308,10 +311,11 @@ int fuse_session_loop_mt(struct fuse_session *se, int clone_fd)
memset(&mt, 0, sizeof(struct fuse_mt));
mt.se = se;
- mt.clone_fd = clone_fd;
+ mt.clone_fd = config->clone_fd;
mt.error = 0;
mt.numworker = 0;
mt.numavail = 0;
+ mt.max_idle = config->max_idle_threads;
mt.main.thread_id = pthread_self();
mt.main.prev = mt.main.next = &mt.main;
sem_init(&mt.finish, 0, 0);
@@ -344,3 +348,13 @@ int fuse_session_loop_mt(struct fuse_session *se, int clone_fd)
fuse_session_reset(se);
return err;
}
+
+int fuse_session_loop_mt_31(struct fuse_session *se, int clone_fd);
+FUSE_SYMVER(".symver fuse_session_loop_mt_31,fuse_session_loop_mt@FUSE_3.1");
+int fuse_session_loop_mt_31(struct fuse_session *se, int clone_fd)
+{
+ struct fuse_loop_config config;
+ config.clone_fd = clone_fd;
+ config.max_idle_threads = 10;
+ return fuse_session_loop_mt_32(se, &config);
+}