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)) {
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to