From 7966faa931bfa9cf4ca53dd2d5b6e1eb0f174411 Mon Sep 17 00:00:00 2001 From: rsc Date: Thu, 23 Sep 2004 03:01:36 +0000 Subject: Continue fighting pthreads. Clean up thread library a bit too. --- src/libthread/exec-unix.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/libthread/exec-unix.c') diff --git a/src/libthread/exec-unix.c b/src/libthread/exec-unix.c index 3d4dfcac..91639bbb 100644 --- a/src/libthread/exec-unix.c +++ b/src/libthread/exec-unix.c @@ -10,9 +10,20 @@ _threadexec(Channel *pidc, int fd[3], char *prog, char *args[], int freeargs) int pfd[2]; int n, pid; char exitstr[ERRMAX]; + static int firstexec = 1; + static Lock lk; _threaddebug(DBGEXEC, "threadexec %s", prog); - + + if(firstexec){ + lock(&lk); + if(firstexec){ + firstexec = 0; + _threadfirstexec(); + } + unlock(&lk); + } + /* * We want threadexec to behave like exec; if exec succeeds, * never return, and if it fails, return with errstr set. @@ -41,6 +52,7 @@ _threadexec(Channel *pidc, int fd[3], char *prog, char *args[], int freeargs) efork(fd, pfd, prog, args); _exit(0); default: + _threadafterexec(); if(freeargs) free(args); break; -- cgit v1.2.3