From cdf4f0e4261561026225257dc9974e5331b4d608 Mon Sep 17 00:00:00 2001 From: brian Date: Mon, 5 Mar 2007 17:47:27 +0000 Subject: [PATCH] In the NOTYET code path when a process forks, the remaining child thread goes back to system scope rather than process scope. This allows an ensuing exec() to actually work. This change was made a year ago here, but I "forgot" to commit it :( Approved by: deischen MFC after: 3 weeks --- lib/libkse/thread/thr_kern.c | 11 ++++------- lib/libpthread/thread/thr_kern.c | 11 ++++------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/lib/libkse/thread/thr_kern.c b/lib/libkse/thread/thr_kern.c index 02ced942abcc..20e81737bdbe 100644 --- a/lib/libkse/thread/thr_kern.c +++ b/lib/libkse/thread/thr_kern.c @@ -228,6 +228,10 @@ _kse_single_thread(struct pthread *curthread) __sys_sigprocmask(SIG_SETMASK, &curthread->sigmask, NULL); _thread_active_threads = 1; + curthread->kse->k_kcb->kcb_kmbx.km_curthread = NULL; + curthread->attr.flags &= ~PTHREAD_SCOPE_SYSTEM; + curthread->attr.flags |= PTHREAD_SCOPE_SYSTEM; + /* * Enter a loop to remove and free all threads other than * the running thread from the active thread list: @@ -310,13 +314,6 @@ _kse_single_thread(struct pthread *curthread) inited = 0; } - /* - * After a fork(), the leftover thread goes back to being - * scope process. - */ - curthread->attr.flags &= ~PTHREAD_SCOPE_SYSTEM; - curthread->attr.flags |= PTHREAD_SCOPE_PROCESS; - /* We're no longer part of any lists */ curthread->tlflags = 0; diff --git a/lib/libpthread/thread/thr_kern.c b/lib/libpthread/thread/thr_kern.c index 02ced942abcc..20e81737bdbe 100644 --- a/lib/libpthread/thread/thr_kern.c +++ b/lib/libpthread/thread/thr_kern.c @@ -228,6 +228,10 @@ _kse_single_thread(struct pthread *curthread) __sys_sigprocmask(SIG_SETMASK, &curthread->sigmask, NULL); _thread_active_threads = 1; + curthread->kse->k_kcb->kcb_kmbx.km_curthread = NULL; + curthread->attr.flags &= ~PTHREAD_SCOPE_SYSTEM; + curthread->attr.flags |= PTHREAD_SCOPE_SYSTEM; + /* * Enter a loop to remove and free all threads other than * the running thread from the active thread list: @@ -310,13 +314,6 @@ _kse_single_thread(struct pthread *curthread) inited = 0; } - /* - * After a fork(), the leftover thread goes back to being - * scope process. - */ - curthread->attr.flags &= ~PTHREAD_SCOPE_SYSTEM; - curthread->attr.flags |= PTHREAD_SCOPE_PROCESS; - /* We're no longer part of any lists */ curthread->tlflags = 0;