From owner-freebsd-current Sat Mar 18 3:53: 6 2000 Delivered-To: freebsd-current@freebsd.org Received: from gatekeeper.tsc.tdk.com (gatekeeper.tsc.tdk.com [207.113.159.21]) by hub.freebsd.org (Postfix) with ESMTP id D05C737B587 for ; Sat, 18 Mar 2000 03:53:03 -0800 (PST) (envelope-from gdonl@tsc.tdk.com) Received: from imap.gv.tsc.tdk.com (imap.gv.tsc.tdk.com [192.168.241.198]) by gatekeeper.tsc.tdk.com (8.8.8/8.8.8) with ESMTP id DAA08912; Sat, 18 Mar 2000 03:52:56 -0800 (PST) (envelope-from gdonl@tsc.tdk.com) Received: from salsa.gv.tsc.tdk.com (salsa.gv.tsc.tdk.com [192.168.241.194]) by imap.gv.tsc.tdk.com (8.9.3/8.9.3) with ESMTP id DAA29441; Sat, 18 Mar 2000 03:52:55 -0800 (PST) (envelope-from Don.Lewis@tsc.tdk.com) Received: (from gdonl@localhost) by salsa.gv.tsc.tdk.com (8.8.5/8.8.5) id DAA29093; Sat, 18 Mar 2000 03:52:55 -0800 (PST) From: Don Lewis Message-Id: <200003181152.DAA29093@salsa.gv.tsc.tdk.com> Date: Sat, 18 Mar 2000 03:52:54 -0800 In-Reply-To: <20000317182756.A14789@fw.wintelcom.net> References: <200003180132.RAA89424@bubba.whistle.com> <20000317182756.A14789@fw.wintelcom.net> X-Mailer: Mail User's Shell (7.2.6 beta(5) 10/07/98) To: Alfred Perlstein , Archie Cobbs Subject: Re: kern/8324 Cc: freebsd-current@FreeBSD.ORG Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG On Mar 17, 6:27pm, Alfred Perlstein wrote: } Subject: Re: kern/8324 } * Archie Cobbs [000317 17:55] wrote: } > This bug has been around since at least 2.2.6 and is still present } > in RELENG_3, RELENG_4, and -current. } > } > http://www.freebsd.org/cgi/query-pr.cgi?pr=8324 } > } > Is anyone planning to tackle it? What would be required to fix it? } > (it's not clear (to me anyway) from Bruce's description how hard } > this is to fix..) I never heard of using SIGIO for output, but section 6.4 of the daemon book says that SIGIO is sent "when a read or write becomes possible". On the other hand, section 10.8 (Terminal Operations) mentions SIGIO for input but not for output. I also looked at rev 1.1 of kern/tty.c and it only sends a SIGIO when input is ready, so this seems to be the historical behaviour, so I'm suprised that this program even worked with plain tty devices. } I think Bruce sort of went off into a tangent with his diagnosis, } anyhow this is untested (of course :) ), but looks like the right } thing to do (from sys_pipe.c). } } Perhaps the fcntls and ioctls aren't being propogated enough to set } the flags properly, but if they are then it should work sort of the } way SIGIO does, basically generating a signal for /some condition/ } on a descriptor. This patch (vs the 3.4-STABLE version of tty.c) causes SIGIO to be sent when a regular or pseudo tty becomes writeable. --- tty.c.orig Sun Aug 29 09:26:09 1999 +++ tty.c Sat Mar 18 03:09:32 2000 @@ -2133,6 +2133,8 @@ if (tp->t_wsel.si_pid != 0 && tp->t_outq.c_cc <= tp->t_olowat) selwakeup(&tp->t_wsel); + if (ISSET(tp->t_state, TS_ASYNC) && tp->t_sigio != NULL) + pgsigio(tp->t_sigio, SIGIO, (tp->t_session != NULL)); if (ISSET(tp->t_state, TS_BUSY | TS_SO_OCOMPLETE) == TS_SO_OCOMPLETE && tp->t_outq.c_cc == 0) { CLR(tp->t_state, TS_SO_OCOMPLETE); BTW, I had to add: fcntl(1, F_SETOWN, getpid()); to the test program since there is no longer a default target to send the signal to. The old scheme had the defect of sending SIGIO to the process group that owned the terminal, which implied that the terminal had to be the controlling terminal for the process group. This limited a process to only receiving SIGIO from one terminal device even if it had more than one open and it wanted to receive SIGIO from all of them. Also, SIGIO was sent to the entire process group, but it may be desireable to limit this to one process. I wonder if it might make sense to go back to the old default for tty devices so that processes only receive SIGIO when they are in the foreground ... To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message