~kris/9p

9hist

879626d0e94fd4310be02aa0a9e962beee4a065f — David du Colombier 31 years ago b59e518
Plan 9 from Bell Labs 1994-09-27
3 files changed, 32 insertions(+), 1 deletions(-)

M port/devns16552.c
M port/portfns.h
M port/qio.c
M port/devns16552.c => port/devns16552.c +4 -0
@@ 830,6 830,10 @@ ns16552ctl(Uart *p, char *cmd)
	case 'd':
		ns16552dtr(p, n);
		break;
	case 'f':
	case 'F':
		qflush(p->oq);
		break;
	case 'H':
	case 'h':
		qhangup(p->iq);

M port/portfns.h => port/portfns.h +1 -0
@@ 192,6 192,7 @@ ulong		pwait(Waitmsg*);
int		qcanread(Queue*);
void		qclose(Queue*);
int		qconsume(Queue*, void*, int);
void		qflush(Queue*);
void		qhangup(Queue*);
void		qinit(void);
int		qlen(Queue*);

M port/qio.c => port/qio.c +27 -1
@@ 609,6 609,7 @@ qclose(Queue *q)
	bfirst = q->bfirst;
	q->bfirst = 0;
	q->len = 0;
	q->noblock = 0;
	iunlock(q);

	/* free queued blocks */


@@ 649,7 650,6 @@ qreopen(Queue *q)
	q->state &= ~Qclosed;
	q->state |= Qstarve;
	q->eof = 0;
	q->noblock = 0;
	q->limit = q->inilim;
}



@@ 702,3 702,29 @@ qnoblock(Queue *q, int onoff)
{
	q->noblock = onoff;
}

/*
 *  flush the output queue
 */
void
qflush(Queue *q)
{
	Block *b, *bfirst;

	/* mark it */
	ilock(q);
	bfirst = q->bfirst;
	q->bfirst = 0;
	q->len = 0;
	iunlock(q);

	/* free queued blocks */
	while(bfirst){
		b = bfirst->next;
		freeb(bfirst);
		bfirst = b;
	}

	/* wake up readers/writers */
	wakeup(&q->wr);
}