diff options
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); +} |