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.orgReceived on Mon Jan 03 2005 - 17:12:46 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:25 UTC