summaryrefslogtreecommitdiffstats
path: root/src/libthread/exec-unix.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2003-11-23 18:18:00 +0000
committerrsc <devnull@localhost>2003-11-23 18:18:00 +0000
commitcd7ddc9b5f34da33a2eb0ea761681c2330284e69 (patch)
treea3f222bf728a1146ee745ae7d1cab1873ac2d019 /src/libthread/exec-unix.c
parentb7e6f4150f0974a3f3b145a23911b7c8a4b9399b (diff)
downloadplan9port-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.c11
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);