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

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

1991/0724/sys/src/9/port/sysproc.c:562,5641991/0806/sys/src/9/port/sysproc.c:562,607 (short | long | prev | next)
1991/0705    
{ 
	return ibrk(arg[0], BSEG); 
1991/0605    
} 
1991/0806    
 
long 
sysrendezvous(ulong *arg) 
{ 
	Proc *p, *d, **l; 
	int s, tag; 
	ulong val; 
 
	tag = arg[0]; 
	l = &REND(u->p->pgrp, tag); 
 
	lock(u->p->pgrp); 
	for(p = *l; p; p = p->rendhash) { 
		if(p->rendtag == tag) { 
			*l = p->rendhash; 
			val = p->rendval; 
			p->rendval = arg[1]; 
 
			if(p->state != Rendezvous) 
				panic("rendezvous"); 
			ready(p); 
			unlock(u->p->pgrp); 
			return val;	 
		} 
		l = &p->rendhash; 
	} 
 
	/* Going to sleep here */ 
	p = u->p; 
	p->rendtag = tag; 
	p->rendval = arg[1]; 
	p->rendhash = *l; 
	*l = p; 
 
	unlock(p->pgrp); 
 
	s = splhi(); 
	u->p->state = Rendezvous; 
	sched(); 
	splx(s); 
 
	return u->p->rendval; 
} 


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