Date: Fri, 16 Feb 1996 22:18:55 +1100 From: Bruce Evans <bde@zeta.org.au> To: babkin@hq.icb.chel.su, bde@zeta.org.au Cc: hackers@freebsd.org Subject: Re: Digi patch Message-ID: <199602161118.WAA07943@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>There is a fix for the bug reported to me by Alexis Yashin (sometimes >the process hangs when closing digi port). Commit it please. >Thank you! >*** dgb.c 1996/02/05 04:35:28 >--- dgb.c 1996/02/05 04:40:17 >*************** >*** 1386,1391 **** >--- 1386,1392 ---- > } > #ifndef TS_ASLEEP /* post 2.0.5 FreeBSD */ > ttwwakeup(tp); >+ wakeup(TSA_OCOMPLETE(tp)); > #else > if(tp->t_state & TS_ASLEEP) { > tp->t_state &= ~TS_ASLEEP; Er, it's wrong. Processes sleeping on TSA_OCOMPLETE(tp) should not be woken up until output is complete. ttwwakeup() does this. Output is complete if t_outq is empty and the TS_BUSY bit is clear. The bug is probably that TS_BUSY doesn't get cleared properly. TS_BUSY apparently gets cleared in the next call to t_oproc() - otherwise ttywait() would loop forever waking itself up. The extra wakeup would be harmless if this livelock wasn't a possibility. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199602161118.WAA07943>