Thanks for all.

I have looked old source code /sys/src/9/port/proc.c, and found the next code 
exists from very old day.

        lock(&procalloc);
        for(;;) {
                if((p = procalloc.free) != nil)
                        break;

                snprint(msg, sizeof msg, "no procs; %s forking",
                        up != nil ? up->text: "kernel");
                unlock(&procalloc);
                resrcwait(msg);
                lock(&procalloc);
        }
        procalloc.free = p->qnext;
        unlock(&procalloc);

and rfork(2) says:
        Rfork will sleep, if necessary, until required process resources are 
available.
which is also exists from old day.

Nevertheless all programs, I believe, in /sys/src are written assuming rfork() 
may return -l:
        switch(rfork(….)){
        case -1:
          …
        }

Any merit?



Reply via email to