Hard system hangs on tty code (6-current)
Slawa Olhovchenkov
slw at zxy.spb.ru
Mon Jan 3 13:39:41 PST 2005
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
More information about the freebsd-current
mailing list