[net.bugs.4bsd] dh soft carrier bug

salkind@cmcl2.UUCP (Lou Salkind) (01/28/84)

Subject: dh soft carrier bug
Index:	sys/vaxuba/dh.c 4.2BSD

Description:
	If the soft carrier flag for a dh line is set (dhsoftCAR), and a
	dm modem interrupt occurs on the line, the TS_CARR_ON flag may be
	cleared.  This causes future reads/writes to the terminal to return
	EIO.
Repeat-By:
	On a line with modem control, bring down DTR to force a modem
	interrupt.  (This really can happen!)
Fix:
	In dmintr(), add the declaration:
		register int unit;
	and change
		if (addr->dmcsr&DM_CF) {
			tp = &dh11[(dm<<4)+(addr->dmcsr&0xf)];
	to
		unit = addr->dmcsr & 0xf;
		if (addr->dmcsr&DM_CF && (dhsoftCAR[dm]&(1<<unit)) == 0) {
			tp = &dh11[(dm<<4)+unit];
	
	(Some may rationalize that the current behavior is correct, but
	in my opinion soft carrier means "ignore modem signals.")