diff options
author | Ralph Boehme <slow@samba.org> | 2019-01-07 18:35:27 +0100 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2019-01-11 23:11:13 +0100 |
commit | e94cd84bbf87ee42495286d6ab9712ba35eaf23d (patch) | |
tree | b843642afd795bce36a0cf4967a6f8acceef4086 /lib | |
parent | 67015e13ca24a23d66ef4e465672288ba59fb889 (diff) | |
download | samba-e94cd84bbf87ee42495286d6ab9712ba35eaf23d.tar.gz |
Revert "pthreadpool: call unshare(CLONE_FS) if available"
This reverts commit 65e4742d168454df6507d9e74993749063435dd6.
See the discussion in
https://lists.samba.org/archive/samba-technical/2018-December/131731.html
for the reasoning behind this revert.
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pthreadpool/pthreadpool.c | 34 | ||||
-rw-r--r-- | lib/pthreadpool/pthreadpool.h | 17 | ||||
-rw-r--r-- | lib/pthreadpool/pthreadpool_sync.c | 5 |
3 files changed, 0 insertions, 56 deletions
diff --git a/lib/pthreadpool/pthreadpool.c b/lib/pthreadpool/pthreadpool.c index c2bafd52c08..b6dad310b0d 100644 --- a/lib/pthreadpool/pthreadpool.c +++ b/lib/pthreadpool/pthreadpool.c @@ -113,13 +113,10 @@ struct pthreadpool { * where the forking thread will unlock it again. */ pthread_mutex_t fork_mutex; - - bool per_thread_cwd; }; static pthread_mutex_t pthreadpools_mutex = PTHREAD_MUTEX_INITIALIZER; static struct pthreadpool *pthreadpools = NULL; -static bool pthreadpool_support_thread_cwd = false; static pthread_once_t pthreadpool_atfork_initialized = PTHREAD_ONCE_INIT; static void pthreadpool_prep_atfork(void); @@ -186,11 +183,6 @@ int pthreadpool_init(unsigned max_threads, struct pthreadpool **presult, pool->max_threads = max_threads; pool->num_idle = 0; pool->prefork_cond = NULL; - if (max_threads != 0) { - pool->per_thread_cwd = pthreadpool_support_thread_cwd; - } else { - pool->per_thread_cwd = false; - } ret = pthread_mutex_lock(&pthreadpools_mutex); if (ret != 0) { @@ -250,15 +242,6 @@ size_t pthreadpool_queued_jobs(struct pthreadpool *pool) return ret; } -bool pthreadpool_per_thread_cwd(struct pthreadpool *pool) -{ - if (pool->stopped) { - return false; - } - - return pool->per_thread_cwd; -} - static void pthreadpool_prepare_pool(struct pthreadpool *pool) { int ret; @@ -377,16 +360,6 @@ static void pthreadpool_child(void) static void pthreadpool_prep_atfork(void) { -#ifdef HAVE_UNSHARE_CLONE_FS - int res; - - /* remember if unshare(CLONE_FS) works. */ - res = unshare(CLONE_FS); - if (res == 0) { - pthreadpool_support_thread_cwd = true; - } -#endif - pthread_atfork(pthreadpool_prepare, pthreadpool_parent, pthreadpool_child); } @@ -599,13 +572,6 @@ static void *pthreadpool_server(void *arg) struct pthreadpool *pool = (struct pthreadpool *)arg; int res; -#ifdef HAVE_UNSHARE_CLONE_FS - if (pool->per_thread_cwd) { - res = unshare(CLONE_FS); - assert(res == 0); - } -#endif - res = pthread_mutex_lock(&pool->mutex); if (res != 0) { return NULL; diff --git a/lib/pthreadpool/pthreadpool.h b/lib/pthreadpool/pthreadpool.h index d8daf9e4519..b4733580e07 100644 --- a/lib/pthreadpool/pthreadpool.h +++ b/lib/pthreadpool/pthreadpool.h @@ -72,23 +72,6 @@ size_t pthreadpool_max_threads(struct pthreadpool *pool); size_t pthreadpool_queued_jobs(struct pthreadpool *pool); /** - * @brief Check for per thread current working directory support of pthreadpool - * - * Since Linux kernel 2.6.16, unshare(CLONE_FS) is supported, - * which provides a per thread current working directory - * and allows [f]chdir() within the worker threads. - * - * Note that this doesn't work on some contraint container setups, - * the complete unshare() syscall might be rejected. - * pthreadpool_per_thread_cwd() returns what is available - * at runtime, so the callers should really check this! - * - * @param[in] pool The pool to run the job on - * @return supported: true, otherwise: false - */ -bool pthreadpool_per_thread_cwd(struct pthreadpool *pool); - -/** * @brief Stop a pthreadpool * * Stop a pthreadpool. If jobs are submitted, but not yet active in diff --git a/lib/pthreadpool/pthreadpool_sync.c b/lib/pthreadpool/pthreadpool_sync.c index 2ed6f36dbbc..48e6a0ddb60 100644 --- a/lib/pthreadpool/pthreadpool_sync.c +++ b/lib/pthreadpool/pthreadpool_sync.c @@ -65,11 +65,6 @@ size_t pthreadpool_queued_jobs(struct pthreadpool *pool) return 0; } -bool pthreadpool_per_thread_cwd(struct pthreadpool *pool) -{ - return false; -} - int pthreadpool_add_job(struct pthreadpool *pool, int job_id, void (*fn)(void *private_data), void *private_data) { |