plan 9 kernel history: overview | file list | diff list

1991/0807/port/sysproc.c (diff list | history)

1991/0806/sys/src/9/port/sysproc.c:9,141991/0807/sys/src/9/port/sysproc.c:9,15 (short | long | prev | next)
1990/0330    
#include	<a.out.h> 
1990/0227    
 
int	shargs(char*, int, char**); 
1991/0807    
long	rfork(ulong); 
1990/0227    
 
long 
sysr1(ulong *arg) 
1991/0806/sys/src/9/port/sysproc.c:20,251991/0807/sys/src/9/port/sysproc.c:21,39
1990/0227    
long 
sysfork(ulong *arg) 
{ 
1991/0807    
	return rfork(Forkfd|Forkeg|Forkpg); 
} 
 
/* This call will obsolete fork */ 
long 
sysrfork(ulong *arg) 
{ 
	return rfork(arg[0]); 
} 
 
long 
rfork(ulong flag) 
{ 
1990/0227    
	Proc *p; 
1991/0705    
	Segment *s; 
1990/0227    
	Page *np, *op; 
1991/0806/sys/src/9/port/sysproc.c:27,331991/0807/sys/src/9/port/sysproc.c:41,50
1990/0227    
	Chan *c; 
1990/0614    
	KMap *k; 
1990/0227    
	int n, on, i; 
	int lastvar;	/* used to compute stack address */ 
1991/0807    
	/* 
	 * used to compute last valid system stack address for copy 
	 */ 
	int lastvar;	 
1991/0709    
 
1990/0227    
	p = newproc(); 
1991/0705    
 
1991/0806/sys/src/9/port/sysproc.c:56,691991/0807/sys/src/9/port/sysproc.c:73,104
1990/0227    
	 * Refs 
	 */ 
1991/0705    
	incref(u->dot);				/* File descriptors etc. */ 
	p->fgrp = dupfgrp(u->p->fgrp); 
 
	p->pgrp = u->p->pgrp;			/* Process groups */ 
	incref(p->pgrp); 
1991/0807    
	if(flag & Forkfd) 
		p->fgrp = dupfgrp(u->p->fgrp); 
	else { 
		p->fgrp = u->p->fgrp; 
		incref(p->fgrp); 
	} 
1991/0705    
 
	p->egrp = u->p->egrp;			/* Environment group */ 
	incref(p->egrp); 
1991/0807    
	if(flag & Forkpg) { 
		p->pgrp = u->p->pgrp;			/* Process groups */ 
		incref(p->pgrp); 
	} 
	else { 
		p->pgrp = newpgrp(); 
		pgrpcpy(p->pgrp, u->p->pgrp); 
	} 
1991/0705    
 
1991/0807    
	if(flag & Forkeg) { 
		p->egrp = u->p->egrp;			/* Environment group */ 
		incref(p->egrp); 
	} 
	else { 
		p->egrp = newegrp(); 
		envcpy(p->egrp, u->p->egrp); 
	} 
 
1990/0227    
	/* 
	 * Sched 
	 */ 
1991/0806/sys/src/9/port/sysproc.c:580,5871991/0807/sys/src/9/port/sysproc.c:615,622
1991/0806    
			val = p->rendval; 
			p->rendval = arg[1]; 
 
			if(p->state != Rendezvous) 
				panic("rendezvous"); 
1991/0807    
			while(p->state != Rendezvous) 
				; 
1991/0806    
			ready(p); 
			unlock(u->p->pgrp); 
			return val;	 
1991/0806/sys/src/9/port/sysproc.c:596,6041991/0807/sys/src/9/port/sysproc.c:631,638
1991/0806    
	p->rendhash = *l; 
	*l = p; 
 
	unlock(p->pgrp); 
                 
	s = splhi(); 
1991/0807    
	unlock(p->pgrp); 
1991/0806    
	u->p->state = Rendezvous; 
	sched(); 
	splx(s); 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)