Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Jun 2009 20:29:56 +0000 (UTC)
From:      Ed Schouten <ed@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r194074 - head/sys/kern
Message-ID:  <200906122029.n5CKTu2I091991@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ed
Date: Fri Jun 12 20:29:55 2009
New Revision: 194074
URL: http://svn.freebsd.org/changeset/base/194074

Log:
  Prevent yet another staircase effect bug in the console device.
  
  Even though I thought I fixed the staircase issue (and I was no longer
  able to reproduce it), I got some reports of the issue still being
  there. It turns out the staircase effect still occurred when
  /dev/console was kept open while killing the getty on the same TTY
  (ttyv0).
  
  For some reason I can't figure out how the old TTY code dealt with that,
  so I assume the issue has always been there. I only exposed it more by
  merging consolectl with ttyv0, which means that the issue was present,
  even on systems without a serial console.
  
  I'm now marking the console device as being closed when closing the
  regular TTY device node. This means that when the getty shuts down,
  init(8) will open /dev/console, which means the termios attributes will
  always be reset in this case.

Modified:
  head/sys/kern/tty.c

Modified: head/sys/kern/tty.c
==============================================================================
--- head/sys/kern/tty.c	Fri Jun 12 20:18:08 2009	(r194073)
+++ head/sys/kern/tty.c	Fri Jun 12 20:29:55 2009	(r194074)
@@ -322,14 +322,14 @@ ttydev_close(struct cdev *dev, int fflag
 	 * console.
 	 */
 	MPASS((tp->t_flags & TF_OPENED) != TF_OPENED);
-	if (dev == dev_console)
+	if (dev == dev_console) {
 		tp->t_flags &= ~TF_OPENED_CONS;
-	else
-		tp->t_flags &= ~(TF_OPENED_IN|TF_OPENED_OUT);
-
-	if (tp->t_flags & TF_OPENED) {
-		tty_unlock(tp);
-		return (0);
+		if (tp->t_flags & TF_OPENED) {
+			tty_unlock(tp);
+			return (0);
+		}
+	} else {
+		tp->t_flags &= ~TF_OPENED;
 	}
 
 	/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906122029.n5CKTu2I091991>