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

1991/0428/gnot/lock.c (diff list | history)

1991/0311/sys/src/9/gnot/lock.c:57,1111991/0428/sys/src/9/gnot/lock.c:57,59 (short | long | prev | next)
1990/03091    
	l->pc = 0; 
1990/0403    
	l->key = 0; 
1990/03091    
} 
                 
void 
qlock(QLock *q) 
{ 
	Proc *p; 
                 
	if(canlock(&q->use)) 
		return; 
	lock(&q->queue); 
	if(canlock(&q->use)){ 
		unlock(&q->queue); 
		return; 
	} 
	p = q->tail; 
	if(p == 0) 
		q->head = u->p; 
	else 
		p->qnext = u->p; 
	q->tail = u->p; 
	u->p->qnext = 0; 
	u->p->state = Queueing; 
1990/05313    
	u->p->qlock = q;	/* DEBUG */ 
1990/03091    
	unlock(&q->queue); 
	sched(); 
} 
                 
1990/0312    
int 
canqlock(QLock *q) 
{ 
	return canlock(&q->use); 
} 
                 
1990/03091    
void 
qunlock(QLock *q) 
{ 
	Proc *p; 
                 
	lock(&q->queue); 
1991/0311    
	if(u) 
		u->p->qlock = 0; 
1990/03091    
	if(q->head){ 
		p = q->head; 
		q->head = p->qnext; 
		if(q->head == 0) 
			q->tail = 0; 
		unlock(&q->queue); 
		ready(p); 
	}else{ 
		unlock(&q->use); 
		unlock(&q->queue); 
	} 
} 


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