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

1991/1018/port/pgrp.c (diff list | history)

1991/1011/sys/src/9/port/pgrp.c:56,621991/1018/sys/src/9/port/pgrp.c:56,62 (short | long | prev | next)
1991/0705    
	ee = &egrpalloc.free[conf.npgrp]; 
	for(e = egrpalloc.free; e < ee; e++) { 
		e->next = e+1; 
		e->etab = ialloc(conf.npgenv*sizeof(Envp*), 0); 
1991/1018    
		e->etab = ialloc(conf.npgenv*sizeof(Env), 0); 
1991/0705    
	} 
	e[-1].next = 0; 
1990/0227    
 
1991/1011/sys/src/9/port/pgrp.c:222,2401991/1018/sys/src/9/port/pgrp.c:222,239
1990/0227    
} 
 
1991/0705    
void 
closeegrp(Egrp *e) 
1991/1018    
closeegrp(Egrp *eg) 
1991/0705    
{ 
	Envp *ep; 
1991/1018    
	Env *e; 
1991/0705    
	int i; 
 
	if(decref(e) == 0) { 
		ep = e->etab; 
		for(i=0; i<e->nenv; i++,ep++) 
			if(ep->env) 
				envpgclose(ep->env); 
1991/1018    
	if(decref(eg) == 0) { 
		e = eg->etab; 
		for(i=0; i<eg->nenv; i++, e++) 
			envpgclose(e); 
1991/0705    
		lock(&egrpalloc); 
		e->next = egrpalloc.free; 
		egrpalloc.free = e; 
1991/1018    
		eg->next = egrpalloc.free; 
		egrpalloc.free = eg; 
1991/0705    
		unlock(&egrpalloc); 
	} 
} 
1991/1011/sys/src/9/port/pgrp.c:292,3321991/1018/sys/src/9/port/pgrp.c:291,307
1990/0227    
void 
1991/0705    
envcpy(Egrp *to, Egrp *from) 
1990/0227    
{ 
	Envp *ep; 
	Env *e; 
1991/0514    
	int i; 
1991/1018    
	Env *te, *fe; 
	int i, nenv; 
1990/0227    
 
	lock(from); 
	to->nenv = from->nenv; 
	ep = to->etab; 
	for(i=0; i<from->nenv; i++,ep++){ 
		ep->chref = 0; 
		e = ep->env = from->etab[i].env; 
		if(e){ 
			lock(e); 
			if(waserror()){ 
				unlock(e); 
				unlock(from); 
				ep->env = 0; 
				nexterror(); 
			} 
			/* 
			 * If pgrp being forked has an open channel 
			 * on this env, it may write it after the fork 
			 * so make a copy now. 
			 * Don't worry about other pgrps, because they 
			 * will copy if they are about to write. 
			 */ 
			if(from->etab[i].chref){ 
				ep->env = copyenv(e, 0); 
				unlock(ep->env); 
			}else 
				e->pgref++; 
			poperror(); 
			unlock(e); 
		} 
	} 
1991/0514    
	unlock(from); 
1991/1018    
	qlock(&from->ev); 
	nenv = from->nenv; 
	to->nenv = nenv; 
	te = to->etab; 
	fe = from->etab; 
	for(i=0; i < nenv; i++, te++, fe++) 
		envpgcopy(te, fe); 
	qunlock(&from->ev); 
1991/0514    
} 
 
void 


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