More locking for syscons(4). This should prevent races with sckbdevent().

PR:		kern/127446
Submitted by:	Eygene Ryabinkin rea-fbsd at codelabs dot ru
This commit is contained in:
Maksim Yevmenkin 2008-11-16 22:39:04 +00:00
parent 6129343d5d
commit ae670dad61

View File

@ -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)) {