From: Christian Brauner Date: Sat, 10 Feb 2018 22:25:18 +0000 (+0100) Subject: lxclock: remove pthread_atfork_handlers X-Git-Tag: lxc-2.0.10~334 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5cdc9b306b15f5986b4d71a36b03216f85b00d8f;p=thirdparty%2Flxc.git lxclock: remove pthread_atfork_handlers They shouldn't be needed anymore. Signed-off-by: Christian Brauner --- diff --git a/src/lxc/attach.c b/src/lxc/attach.c index 502847533..cb1d7b977 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c @@ -1189,13 +1189,10 @@ int lxc_attach(const char *name, const char *lxcpath, return -1; } - /* Create intermediate subprocess, three reasons: - * 1. Runs all pthread_atfork handlers and the child will no - * longer be threaded (we can't properly setns() in a threaded - * process). - * 2. We can't setns() in the child itself, since we want to make + /* Create intermediate subprocess, two reasons: + * 1. We can't setns() in the child itself, since we want to make * sure we are properly attached to the pidns. - * 3. Also, the initial thread has to put the attached process + * 2. Also, the initial thread has to put the attached process * into the cgroup, which we can only do if we didn't already * setns() (otherwise, user namespaces will hate us). */ diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c index ccf9079da..600a7402d 100644 --- a/src/lxc/lxclock.c +++ b/src/lxc/lxclock.c @@ -317,23 +317,6 @@ void process_unlock(void) unlock_mutex(&thread_mutex); } -/* One thread can do fork() while another one is holding a mutex. - * There is only one thread in child just after the fork(), so no one will ever release that mutex. - * We setup a "child" fork handler to unlock the mutex just after the fork(). - * For several mutex types, unlocking an unlocked mutex can lead to undefined behavior. - * One way to deal with it is to setup "prepare" fork handler - * to lock the mutex before fork() and both "parent" and "child" fork handlers - * to unlock the mutex. - * This forbids doing fork() while explicitly holding the lock. - */ -#ifdef HAVE_PTHREAD_ATFORK -__attribute__((constructor)) -static void process_lock_setup_atfork(void) -{ - pthread_atfork(process_lock, process_unlock, process_unlock); -} -#endif - int container_mem_lock(struct lxc_container *c) { return lxclock(c->privlock, 0);