diff options
| author | rsc <devnull@localhost> | 2003-11-23 18:18:00 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2003-11-23 18:18:00 +0000 |
| commit | cd7ddc9b5f34da33a2eb0ea761681c2330284e69 (patch) | |
| tree | a3f222bf728a1146ee745ae7d1cab1873ac2d019 /src/libthread/exec-unix.c | |
| parent | b7e6f4150f0974a3f3b145a23911b7c8a4b9399b (diff) | |
| download | plan9port-cd7ddc9b5f34da33a2eb0ea761681c2330284e69.tar.gz plan9port-cd7ddc9b5f34da33a2eb0ea761681c2330284e69.zip | |
make -> mk
remove clumsy stack hack.
fix exec.
fix nthreads maintenance.
fix threadexitsall not to kill self.
add sun support.
Diffstat (limited to 'src/libthread/exec-unix.c')
| -rw-r--r-- | src/libthread/exec-unix.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/libthread/exec-unix.c b/src/libthread/exec-unix.c index 5a37e34c..6e4f7289 100644 --- a/src/libthread/exec-unix.c +++ b/src/libthread/exec-unix.c @@ -9,11 +9,13 @@ procexec(Channel *pidc, char *prog, char *args[]) Proc *p; Thread *t; +print("procexec\n"); _threaddebug(DBGEXEC, "procexec %s", prog); /* must be only thread in proc */ p = _threadgetproc(); t = p->thread; if(p->threads.head != t || p->threads.head->nextt != nil){ +print("not only thread\n"); werrstr("not only thread in proc"); Bad: if(pidc) @@ -34,26 +36,35 @@ procexec(Channel *pidc, char *prog, char *args[]) * pipe to us. */ if(pipe(p->exec.fd) < 0) +{ +print("pipe\n"); goto Bad; +} if(fcntl(p->exec.fd[1], F_SETFD, 1) < 0) +{ +print("fcntl\n"); goto Bad; +} /* exec in parallel via the scheduler */ assert(p->needexec==0); p->exec.prog = prog; p->exec.args = args; p->needexec = 1; +print("sched\n"); _sched(); close(p->exec.fd[1]); if((n = read(p->exec.fd[0], p->exitstr, ERRMAX-1)) > 0){ /* exec failed */ p->exitstr[n] = '\0'; +print("read got %s\n", p->exitstr); errstr(p->exitstr, ERRMAX); close(p->exec.fd[0]); goto Bad; } close(p->exec.fd[0]); +print("exec %d\n", pidc); if(pidc) sendul(pidc, t->ret); |
