diff options
author | Joseph Dodge <joseph.dodge@veritas.com> | 2017-08-24 14:37:10 +0200 |
---|---|---|
committer | Nikolaus Rath <Nikolaus@rath.org> | 2017-08-24 15:17:01 +0200 |
commit | f12d9686d4d673e59b8f561c49996820763220b1 (patch) | |
tree | a06f9f3941f2abe727eb06f5ff1ec70972498208 /lib/fuse_loop_mt.c | |
parent | fc83143867a37e34a51ce5a6d763b46715abf02d (diff) |
Add idle_threads mount option.
Diffstat (limited to 'lib/fuse_loop_mt.c')
-rw-r--r-- | lib/fuse_loop_mt.c | 20 |
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); +} |