diff options
Diffstat (limited to 'src/thread/pthread_create.c')
| -rw-r--r-- | src/thread/pthread_create.c | 22 | 
1 files changed, 8 insertions, 14 deletions
| diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c index 844d7bf9..8e3a4a26 100644 --- a/src/thread/pthread_create.c +++ b/src/thread/pthread_create.c @@ -44,18 +44,6 @@ void __pthread_unwind_next(struct __ptcb *cb)  	__syscall(SYS_exit, 0);  } -static void init_threads() -{ -	sigset_t set; -	libc.lock = __lock; -	libc.lockfile = __lockfile; - -	sigemptyset(&set); -	sigaddset(&set, SIGSYSCALL); -	sigaddset(&set, SIGCANCEL); -	__libc_sigprocmask(SIG_UNBLOCK, &set, 0); -} -  static int start(void *p)  {  	struct pthread *self = p; @@ -79,7 +67,6 @@ weak_alias(dummy, __pthread_tsd_size);  int pthread_create(pthread_t *res, const pthread_attr_t *attr, void *(*entry)(void *), void *arg)  { -	static int init;  	int ret;  	size_t size, guard;  	struct pthread *self = pthread_self(), *new; @@ -87,7 +74,14 @@ int pthread_create(pthread_t *res, const pthread_attr_t *attr, void *(*entry)(vo  	const pthread_attr_t default_attr = { 0 };  	if (!self) return ENOSYS; -	if (!init && ++init) init_threads(); +	if (!libc.threaded) { +		sigset_t set; +		sigemptyset(&set); +		sigaddset(&set, SIGSYSCALL); +		sigaddset(&set, SIGCANCEL); +		__libc_sigprocmask(SIG_UNBLOCK, &set, 0); +		libc.threaded = 1; +	}  	if (!attr) attr = &default_attr;  	guard = ROUND(attr->_a_guardsize + DEFAULT_GUARD_SIZE); | 
