| plan 9 kernel history: overview | file list | diff list |
1992/0428/port/sysproc.c (diff list | history)
| 1992/0420/sys/src/9/port/sysproc.c:21,29 – 1992/0428/sys/src/9/port/sysproc.c:21,35 (short | long | prev | next) | ||
| 1990/0227 | sysfork(ulong *arg) { | |
| 1991/1115 | USED(arg); | |
| 1991/0808 |
| |
| 1992/0428 | return rfork(FORKFDG|FORKPCS); | |
| 1991/0807 | } | |
| 1992/0428 | long sys__rfork__(ulong *arg) { return rfork(arg[0]|FORKPCS); } | |
| 1991/0807 | /* This call will obsolete fork */ long sysrfork(ulong *arg) | |
| 1992/0420/sys/src/9/port/sysproc.c:40,50 – 1992/0428/sys/src/9/port/sysproc.c:46,93 | ||
| 1992/0420 | int n, on, i; | |
| 1990/0227 | Chan *c; | |
| 1990/0614 | KMap *k; | |
| 1992/0428 | Pgrp *opg; Egrp *oeg; Fgrp *ofg; | |
| 1991/0807 | /* * used to compute last valid system stack address for copy */ int lastvar; | |
| 1991/0709 | ||
| 1992/0428 | p = u->p; if((flag&FORKPCS) == 0) { if(flag & (FORKNSG|FORKCNSG)) { if((flag & (FORKNSG|FORKCNSG)) == (FORKNSG|FORKCNSG)) error(Ebadarg); opg = p->pgrp; p->pgrp = newpgrp(); if(flag & FORKNSG) pgrpcpy(p->pgrp, opg); closepgrp(opg); } if(flag & (FORKEVG|FORKCEVG)) { if((flag & (FORKEVG|FORKCEVG)) == (FORKEVG|FORKCEVG)) error(Ebadarg); oeg = p->egrp; p->egrp = newegrp(); if(flag & FORKEVG) envcpy(p->egrp, oeg); closeegrp(oeg); } if(flag & FORKFDG) error(Ebadarg); if(flag & FORKCFDG) { ofg = p->fgrp; p->fgrp = newfgrp(); closefgrp(ofg); } if(flag & FORKNTG) p->noteid = incref(¬eidalloc); if(flag & FORKMEM) error(Ebadarg); return 0; } | |
| 1990/0227 | p = newproc(); | |
| 1991/0705 | /* Page va of upage used as check in mapstack */ | |
| 1992/0420/sys/src/9/port/sysproc.c:66,95 – 1992/0428/sys/src/9/port/sysproc.c:109,165 | ||
| 1991/0705 | p->seg[i] = dupseg(u->p->seg[i]); | |
| 1991/1110 | /* Refs */ | |
| 1992/0307 |
| |
| 1992/0428 | incref(u->dot); | |
| 1991/0705 | ||
| 1991/0807 |
| |
| 1991/0808 |
| |
| 1992/0428 | if(flag & FORKMEM) error(Egreg); /* File descriptors */ if(flag & (FORKFDG|FORKCFDG)) { if((flag & (FORKFDG|FORKCFDG)) == (FORKFDG|FORKCFDG)) error(Ebadarg); if(flag & FORKFDG) p->fgrp = dupfgrp(u->p->fgrp); else if(flag & FORKCFDG) p->fgrp = newfgrp(); } else { | |
| 1991/0807 | p->fgrp = u->p->fgrp; incref(p->fgrp); } | |
| 1991/0705 | ||
| 1991/0807 |
| |
| 1992/0428 | /* Process groups */ if(flag & (FORKNSG|FORKCNSG)) { if((flag & (FORKNSG|FORKCNSG)) == (FORKNSG|FORKCNSG)) error(Ebadarg); if(flag & FORKNSG) { p->pgrp = newpgrp(); pgrpcpy(p->pgrp, u->p->pgrp); } else if(flag & FORKCNSG) p->pgrp = newpgrp(); | |
| 1991/0807 | } | |
| 1991/0808 | else { | |
| 1992/0428 | p->pgrp = u->p->pgrp; | |
| 1991/0808 | incref(p->pgrp); } | |
| 1991/0705 | ||
| 1991/0807 |
| |
| 1992/0428 | /* Environment group */ if(flag & (FORKEVG|FORKCEVG)) { if((flag & (FORKEVG|FORKCEVG)) == (FORKEVG|FORKCEVG)) error(Ebadarg); if(flag & FORKEVG) { p->egrp = newegrp(); envcpy(p->egrp, u->p->egrp); } else if(flag & FORKCEVG) p->egrp = newegrp(); | |
| 1991/0807 | } | |
| 1991/0808 | else { | |
| 1992/0428 | p->egrp = u->p->egrp; | |
| 1991/0808 | incref(p->egrp); } | |
| 1991/0807 | ||
| 1992/0420/sys/src/9/port/sysproc.c:111,116 – 1992/0428/sys/src/9/port/sysproc.c:181,188 | ||
| 1991/0705 | ||
| 1990/0227 | p->parent = u->p; p->parentpid = u->p->pid; | |
| 1992/0428 | if((flag&FORKNTG) == 0) p->noteid = u->p->noteid; | |
| 1991/0705 | ||
| 1991/0118 | p->fpstate = u->p->fpstate; | |
| 1991/0926 | lock(&u->p->exl); | |
| 1992/0420/sys/src/9/port/sysproc.c:513,518 – 1992/0428/sys/src/9/port/sysproc.c:585,591 | ||
| 1991/0514 | u->notified = 0; memset(u->note, 0, sizeof(u->note)); } | |
| 1992/0428 | u->p->noteid = incref(¬eidalloc); | |
| 1991/0514 | ||
| 1991/0614 | poperror(); | |
| 1990/0227 | closepgrp(u->p->pgrp); | |