Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Nov 2008 22:39:04 +0000 (UTC)
From:      Maksim Yevmenkin <emax@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r185013 - head/sys/dev/syscons
Message-ID:  <200811162239.mAGMd4mh066533@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: emax
Date: Sun Nov 16 22:39:04 2008
New Revision: 185013
URL: http://svn.freebsd.org/changeset/base/185013

Log:
  More locking for syscons(4). This should prevent races with sckbdevent().
  
  PR:		kern/127446
  Submitted by:	Eygene Ryabinkin rea-fbsd at codelabs dot ru

Modified:
  head/sys/dev/syscons/syscons.c

Modified: head/sys/dev/syscons/syscons.c
==============================================================================
--- head/sys/dev/syscons/syscons.c	Sun Nov 16 21:57:54 2008	(r185012)
+++ head/sys/dev/syscons/syscons.c	Sun Nov 16 22:39:04 2008	(r185013)
@@ -1572,6 +1572,7 @@ sccngetch(int flags)
     int s = spltty();	/* block sckbdevent and scrn_timer while we poll */
     int c;
 
+    mtx_lock(&Giant);
     /* assert(sc_console != NULL) */
 
     /* 
@@ -1583,11 +1584,13 @@ sccngetch(int flags)
     sccnupdate(scp);
 
     if (fkeycp < fkey.len) {
+	mtx_unlock(&Giant);
 	splx(s);
 	return fkey.str[fkeycp++];
     }
 
     if (scp->sc->kbd == NULL) {
+	mtx_unlock(&Giant);
 	splx(s);
 	return -1;
     }
@@ -1610,6 +1613,7 @@ sccngetch(int flags)
     scp->kbd_mode = cur_mode;
     kbdd_ioctl(scp->sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
     kbdd_disable(scp->sc->kbd);
+    mtx_unlock(&Giant);
     splx(s);
 
     switch (KEYFLAGS(c)) {



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