diff options
| author | Rich Felker <dalias@aerifal.cx> | 2011-03-09 20:23:44 -0500 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2011-03-09 20:23:44 -0500 | 
| commit | 3f5420bcda134de80ed6b0f0da1d7d23f147a4cc (patch) | |
| tree | 26944073654dbcf3fd1f976b3052a126b93e9f51 | |
| parent | 6dc05fbe198ccb326dceb8f05ee943f9a4dfb4ba (diff) | |
| download | musl-3f5420bcda134de80ed6b0f0da1d7d23f147a4cc.tar.gz | |
make fork properly initialize the main thread in the child process
| -rw-r--r-- | src/process/fork.c | 7 | 
1 files changed, 7 insertions, 0 deletions
| diff --git a/src/process/fork.c b/src/process/fork.c index 0638ed67..87e7dc96 100644 --- a/src/process/fork.c +++ b/src/process/fork.c @@ -1,12 +1,19 @@  #include <unistd.h>  #include "syscall.h"  #include "libc.h" +#include "pthread_impl.h"  pid_t fork(void)  {  	pid_t ret;  	if (libc.fork_handler) libc.fork_handler(-1);  	ret = syscall0(__NR_fork); +	if (libc.lock && !ret) { +		pthread_t self = __pthread_self(); +		self->pid = syscall0(__NR_getpid); +		self->tid = syscall0(__NR_gettid); +		libc.threads_minus_1 = 0; +	}  	if (libc.fork_handler) libc.fork_handler(!ret);  	return ret;  } | 
