Re: Hard system hangs on tty code (6-current)

From: Slawa Olhovchenkov <slw_at_zxy.spb.ru>
Date: Mon, 3 Jan 2005 23:23:46 +0300
On Mon, Jan 03, 2005 at 10:12:46AM -0800, Doug White wrote:

kern/75758

> Could you file a PR on this? Thanks!
> 
> On Sun, 2 Jan 2005, Slawa Olhovchenkov wrote:
> 
> > 6-current totally hangs by this program, from user, not root.
> > No responds on keys pressed, Control-Alt-ESC, switching console and etc.
> >
> > System run in infinite loop in sys/kern/tty.c:ttread()
> >
> > ===
> > read:
> >         splx(s);
> >         /*
> >          * Input present, check for input mapping and processing.
> >          */
> >         first = 1;
> >         if (ISSET(lflag, ICANON | ISIG))
> >                 goto slowcase;
> >         for (;;) {
> >                 char ibuf[IBUFSIZ];
> >                 int icc;
> >
> >                 icc = imin(uio->uio_resid, IBUFSIZ);
> > /* XXX uio_resid==0 => icc=0 */
> >                 icc = q_to_b(qp, ibuf, icc);
> > /* icc == 0 */
> >                 if (icc <= 0) {
> >                         if (first)
> >                                 goto loop;
> >
> > ===
> >
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <unistd.h>
> > #include <errno.h>
> > #include <termios.h>
> > #include <sys/types.h>
> > #include <sys/stat.h>
> > #include <fcntl.h>
> > #include <string.h>
> >
> > #define cfmakeraw(ptr) (ptr)->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR\
> > 					 |IGNCR|ICRNL|IXON);\
> >                        (ptr)->c_oflag &= ~OPOST;\
> >                        (ptr)->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);\
> >                        (ptr)->c_cflag &= ~(CSIZE|PARENB);\
> >                        (ptr)->c_cflag |= CS8
> >
> >
> > int
> > main(int argc, char *argv[])
> > {
> > 	int 	fd,
> > 		i;
> > 	char *buf[1024];
> >
> > 	struct termios tcn;
> > 	if ((fd = open("/dev/tty", O_RDWR | O_NONBLOCK)) == -1) {
> > 		return -1;	/* errno already set */
> > 	}
> >
> > 	/* Set the tty to raw and to the correct speed */
> > 	tcgetattr(fd, &tcn);
> >
> > 	tcn.c_oflag 	= 0;
> > 	tcn.c_iflag 	= IGNBRK | IGNPAR;
> > 	tcn.c_cflag 	= CREAD | CLOCAL | CS8;
> >
> > 	tcn.c_lflag = NOFLSH;
> >
> > 	cfmakeraw(&tcn);
> >
> > 	for (i = 0; i < 16; i++)
> > 		tcn.c_cc[i] = 0;
> >
> > 	tcn.c_cc[VMIN] 	= 1;
> > 	tcn.c_cc[VTIME] = 0;
> >
> > 	tcsetattr(fd, TCSANOW, &tcn);
> >
> > 	if ((i = fcntl(fd, F_GETFL, 0)) != -1) {
> > 		i &= ~O_NONBLOCK;
> > 		fcntl(fd, F_SETFL, i);
> > 	}
> > 	read(fd, buf, 0);
> >
> > }
> >
> >
> >
> >
> 
> -- 
> Doug White                    |  FreeBSD: The Power to Serve
> dwhite_at_gumbysoft.com          |  www.FreeBSD.org
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"

-- 
Slawa Olhovchenkov
Received on Mon Jan 03 2005 - 20:39:41 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:25 UTC