[comp.os.minix] minixST 1.5 bugs in tty.c

leo@marco.UUCP (Matthias Pfaller) (08/03/90)

There seem to be some bugs in tty.c.
1. Try to type a ^S followd by a ^D (but do a sync before).
   now you will get many login prompts but the tty-task is still blocked.

After receiving of a ^D the following code is executed

			/* CTRL-D means end-of-file, unless it is escaped. It
			 * is stored in the text as MARKER, and counts as a
			 * line feed in terms of knowing whether a full line
			 * has been typed already.
			 */
			if (ch == tp->tty_eof) {
				ch = MARKER;
				tp->tty_lfct++; /* counts as LF */
			}

this relies on the fact that at the end of in_char ch will be inserted
in tty_inqueue.

But if the line is in STOPPED state the following code is executed after
the receiption of any character:

	/* Check for and process CTRL-Q (terminal start). */
	if (tp->tty_inhibited == STOPPED) {
		tp->tty_inhibited = RUNNING;
		(*tp->tty_devstart)(tp);	/* resume output */
		return;
	}

So MARKER gets never inserted in tty_inqueue.
The code should (I think) look like 

	/* Check for and process CTRL-Q (terminal start). */
	if (tp->tty_inhibited == STOPPED) {
		tp->tty_inhibited = RUNNING;
		(*tp->tty_devstart)(tp);	/* resume output */
		if (ch == tp->tty_xoff)
			return;
	}
	else if (ch == tp->tty_xoff)
		return;

After this correction minix behaves like our Unix-box in ixany-mode.

2. If you have connected a terminal to tty1 type a ^S there. Now go to
   your console, do some output and type a ^S followd by a ^Q.
   Now tty1 hangs.

I do not the cause of this problem, but if anyone allready has solved
this problem, I would like to know it.

	Matthias Pfaller (leo@verw.marco.de)