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>