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

1998/0328/port/qio.c (diff list | history)

1997/1105/sys/src/9/port/qio.c:766,7711998/0328/sys/src/9/port/qio.c:766,772 (short | long | prev | next)
1993/0526    
	if(q == 0) 
1993/0528    
		return 0; 
 
1998/0328    
	ilock(q); 
1994/0902    
	q->limit = q->inilim = limit; 
1993/0526    
	q->kick = kick; 
	q->arg = arg; 
1997/1105/sys/src/9/port/qio.c:772,7771998/0328/sys/src/9/port/qio.c:773,779
1993/0530    
	q->state = msg ? Qmsg : 0; 
1993/0601    
	q->state |= Qstarve; 
1993/0908    
	q->eof = 0; 
1998/0328    
	iunlock(q); 
1993/0526    
 
	return q; 
} 
1997/1105/sys/src/9/port/qio.c:911,9421998/0328/sys/src/9/port/qio.c:913,950
1994/0208    
	dowakeup = 0; 
1995/0714    
	n = BLEN(b); 
1993/0526    
 
1998/0328    
	qlock(&q->wlock); 
1994/0208    
	if(waserror()){ 
		qunlock(&q->wlock); 
		nexterror(); 
1994/0804    
	} 
1994/0208    
	qlock(&q->wlock); 
 
1995/0714    
	/* flow control */ 
	while(!qnotfull(q)){ 
1998/0328    
	for(;;){ 
		ilock(q); 
 
		if(q->state & Qclosed){ 
			iunlock(q); 
			freeb(b); 
			error(q->err); 
		} 
 
		if(q->len < q->limit) 
			break; 
 
1995/0714    
		if(q->noblock){ 
1998/0328    
			iunlock(q); 
1995/0714    
			freeb(b); 
1993/1227    
			qunlock(&q->wlock); 
1994/0208    
			poperror(); 
1995/0714    
			return n; 
1993/1227    
		} 
1998/0328    
 
1995/0714    
		q->state |= Qflow; 
1998/0328    
		iunlock(q); 
1995/0714    
		sleep(&q->wr, qnotfull, q); 
1993/0526    
	} 
 
1995/0714    
	ilock(q); 
                 
	if(q->state & Qclosed){ 
		iunlock(q); 
1996/0305    
		freeb(b); 
1997/0327    
		error(q->err); 
1995/0714    
	} 
                 
	if(q->bfirst) 
		q->blast->next = b; 
	else 
1997/1105/sys/src/9/port/qio.c:1120,11291998/0328/sys/src/9/port/qio.c:1128,1139
1993/0528    
void 
qreopen(Queue *q) 
{ 
1998/0328    
	ilock(q); 
1993/0528    
	q->state &= ~Qclosed; 
1993/0601    
	q->state |= Qstarve; 
1993/0908    
	q->eof = 0; 
1994/0902    
	q->limit = q->inilim; 
1998/0328    
	iunlock(q); 
1993/0530    
} 
 
/* 


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