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

1992/0303/port/devmux.c (diff list | history)

1992/0201/sys/src/9/port/devmux.c:292,2971992/0303/sys/src/9/port/devmux.c:292,344 (short | long | prev | next)
1991/1114    
} 
 
void 
1992/0303    
muxclose(Chan *c) 
{ 
	Block *f1, *f2; 
	Con *cm, *e; 
	Mux *m; 
	int nc; 
 
	if(c->qid.path&CHDIR) 
		return; 
 
	m = &muxes[NMUX(c)]; 
	if(!(c->flag&COPEN) || m->srv) 
		return; 
 
	nc = NCON(c); 
	f1 = 0; 
	f2 = 0; 
	switch(nc) { 
	case Qhead: 
		m->headopen = 0; 
		cm = m->connects; 
		for(e = &cm[Nmux]; cm < e; cm++) 
			if(cm->ref) 
				wakeup(&cm->conq.r); 
		lock(m); 
		if(--m->ref == 0) 
			f1 = muxclq(&m->headq); 
		unlock(m); 
		break; 
	case Qclone: 
		break; 
	default: 
		lock(m); 
		cm = &m->connects[nc-Qoffset]; 
		if(--cm->ref == 0) 
			f1 = muxclq(&cm->conq); 
		if(--m->ref == 0) 
			f1 = muxclq(&m->headq); 
		unlock(m); 
	} 
	if(f1) 
		freeb(f1); 
	if(f2) 
		freeb(f2); 
} 
 
void 
1991/1114    
muxremove(Chan *c) 
{ 
	Mux *m; 
1992/0201/sys/src/9/port/devmux.c:353,4051992/0303/sys/src/9/port/devmux.c:400,405
1991/1115    
		m->connects[nc-Qoffset].perm = d.mode; 
1991/1114    
		break; 
	} 
} 
                 
void 
muxclose(Chan *c) 
{ 
	Block *f1, *f2; 
	Con *cm, *e; 
	Mux *m; 
	int nc; 
                 
1991/1115    
	if(c->qid.path&CHDIR) 
1991/1114    
		return; 
                 
1991/1117    
	m = &muxes[NMUX(c)]; 
	if(!(c->flag&COPEN) || m->srv) 
1991/1115    
		return; 
                 
1991/1114    
	nc = NCON(c); 
	f1 = 0; 
	f2 = 0; 
	switch(nc) { 
	case Qhead: 
		m->headopen = 0; 
		cm = m->connects; 
		for(e = &cm[Nmux]; cm < e; cm++) 
			if(cm->ref) 
				wakeup(&cm->conq.r); 
		lock(m); 
1991/1115    
		if(--m->ref == 0) 
			f1 = muxclq(&m->headq); 
1991/1114    
		unlock(m); 
		break; 
	case Qclone: 
1991/1115    
		break; 
1991/1114    
	default: 
		lock(m); 
1991/1115    
		cm = &m->connects[nc-Qoffset]; 
		if(--cm->ref == 0) 
			f1 = muxclq(&cm->conq); 
		if(--m->ref == 0) 
			f1 = muxclq(&m->headq); 
1991/1114    
		unlock(m); 
	} 
	if(f1) 
		freeb(f1); 
	if(f2) 
		freeb(f2); 
} 
 
long 


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