libthread: deal with _schedfork() and _schedexec() returning -1
The current behaviour of the kernel to deadlock itself instead of returning an error on fork. This might change in the future, so prepare libthread to handle this case. For _schedfork(), we'r going to just retry forking on every switch, while for _schedexec(), the exec will fail and send ~0 down the pid channel.
This commit is contained in:
parent
24bd67f990
commit
07608c768f
6 changed files with 72 additions and 63 deletions
|
@ -45,8 +45,10 @@ procexec(Channel *pidc, char *prog, char *args[])
|
|||
close(p->exec.fd[1]);
|
||||
p->exec.fd[1] = n;
|
||||
|
||||
while(p->needexec || p->newproc)
|
||||
_sched();
|
||||
|
||||
/* exec in parallel via the scheduler */
|
||||
assert(p->needexec==0);
|
||||
p->exec.prog = prog;
|
||||
p->exec.args = args;
|
||||
p->needexec = 1;
|
||||
|
@ -61,6 +63,8 @@ procexec(Channel *pidc, char *prog, char *args[])
|
|||
}
|
||||
close(p->exec.fd[0]);
|
||||
|
||||
if(t->ret == -1)
|
||||
goto Bad;
|
||||
if(pidc)
|
||||
sendul(pidc, t->ret);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue