since 20 is much less than 128, this can't be the kernel.  i think the
problem is in the discarded wait messages here: rc/plan9.c/^Waitfor

Where do you see discarded wait messages?

int
Waitfor(int pid, int)
{
        thread *p;
        Waitmsg *w;
        char errbuf[ERRMAX];

        while((w = wait()) != nil){
                if(w->pid==pid){
                        setstatus(w->msg);
                        free(w);
                        return 0;
                }
                for(p = runq->ret;p;p = p->ret)
                        if(p->pid==w->pid){
                                p->pid=-1;
                                strcpy(p->status, w->msg);
                        }

This loop is trying to save the information about the
wait message.  But it doesn't seem to get consulted
anywhere, and I have never understood why that particular
linked list is the one to be looking through.

Russ

Reply via email to