erik quanstrom
2012-04-25 19:46:46 UTC
i just modified _schedexecwait to not eat wait messages.
i think that if you're asynchronously procexecing() and
waiting for wait messages, some could have been lost.
have i missed something? this seems too basic.
- erik
---
void
_schedexecwait(void)
{
int pid;
Channel *c;
Proc *p;
Thread *t;
Waitmsg *w;
p = _threadgetproc();
t = p->thread;
pid = t->ret;
_threaddebug(DBGEXEC, "_schedexecwait %d", t->ret);
rfork(RFCFDG);
for(;;){
w = wait();
if(w == nil)
break;
if(w->pid == pid)
break;
++ if((c = _threadwaitchan) != nil)
++ sendp(c, w);
++ else
free(w);
}
if(w != nil){
if((c = _threadwaitchan) != nil)
sendp(c, w);
else
free(w);
}
threadexits("procexec");
}
i think that if you're asynchronously procexecing() and
waiting for wait messages, some could have been lost.
have i missed something? this seems too basic.
- erik
---
void
_schedexecwait(void)
{
int pid;
Channel *c;
Proc *p;
Thread *t;
Waitmsg *w;
p = _threadgetproc();
t = p->thread;
pid = t->ret;
_threaddebug(DBGEXEC, "_schedexecwait %d", t->ret);
rfork(RFCFDG);
for(;;){
w = wait();
if(w == nil)
break;
if(w->pid == pid)
break;
++ if((c = _threadwaitchan) != nil)
++ sendp(c, w);
++ else
free(w);
}
if(w != nil){
if((c = _threadwaitchan) != nil)
sendp(c, w);
else
free(w);
}
threadexits("procexec");
}