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

1990/1101/port/proc.c (diff list | history)

1990/0801/sys/src/9/port/proc.c:343,3491990/1101/sys/src/9/port/proc.c:343,402 (short | long | prev | next)
Move broken process code into new addbroken. Add freebroken.
rsc Mon Mar 20 17:14:05 2006
1990/0227    
	return 1; 
} 
 
1990/1101    
 
/* 
 * weird thing: keep at most NBROKEN around 
 */ 
#define	NBROKEN 4 
struct{ 
	Lock; 
	int	n; 
	Proc	*p[NBROKEN]; 
}broken; 
 
1990/0227    
void 
1990/1101    
addbroken(Proc *c) 
{ 
	int b; 
 
	lock(&broken); 
	if(broken.n == NBROKEN){ 
		ready(broken.p[0]); 
		memcpy(&broken.p[0], &broken.p[1], sizeof(Proc*)*(NBROKEN-1)); 
		--broken.n; 
	} 
	broken.p[broken.n++] = c; 
	unlock(&broken); 
	c->state = Broken; 
	sched();		/* until someone lets us go */ 
	lock(&broken); 
	for(b=0; b<NBROKEN; b++) 
		if(broken.p[b] == c){ 
			broken.n--; 
			memcpy(&broken.p[b], &broken.p[b+1], sizeof(Proc*)*(NBROKEN-(b+1))); 
			break; 
		} 
	unlock(&broken); 
} 
 
int 
freebroken(void) 
{ 
	int n; 
 
 
	lock(&broken); 
	n = broken.n; 
	while(broken.n > 0){ 
		ready(broken.p[0]); 
		memcpy(&broken.p[0], &broken.p[1], sizeof(Proc*)*(NBROKEN-1)); 
		--broken.n; 
	} 
	unlock(&broken); 
	return n; 
} 
 
void 
1990/0227    
pexit(char *s, int freemem) 
{ 
	char status[64]; 
1990/0801/sys/src/9/port/proc.c:418,4521990/1101/sys/src/9/port/proc.c:471,477
1990/0227    
	} 
   out: 
	if(!freemem){ 
1990/0509    
		/* 
		 * weird thing: keep at most NBROKEN around 
		 */ 
		#define	NBROKEN 4 
		static struct{ 
			Lock; 
			int	n; 
			Proc	*p[NBROKEN]; 
		}broken; 
		int b; 
                 
		lock(&broken); 
		if(broken.n == NBROKEN){ 
			ready(broken.p[0]); 
			memcpy(&broken.p[0], &broken.p[1], sizeof(Proc*)*(NBROKEN-1)); 
			--broken.n; 
		} 
		broken.p[broken.n++] = c; 
		unlock(&broken); 
1990/03081    
		c->state = Broken; 
1990/0227    
		sched();		/* until someone lets us go */ 
1990/0509    
		lock(&broken); 
		for(b=0; b<NBROKEN; b++) 
			if(broken.p[b] == c){ 
				broken.n--; 
				memcpy(&broken.p[b], &broken.p[b+1], sizeof(Proc*)*(NBROKEN-(b+1))); 
				break; 
			} 
		unlock(&broken); 
1990/1101    
		addbroken(c); 
1990/0227    
		freesegs(-1); 
1990/03081    
		closepgrp(c->pgrp); 
1990/0227    
		close(u->dot); 


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