diff options
author | ru <ru@FreeBSD.org> | 2006-11-06 19:06:07 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2006-11-06 19:06:07 +0000 |
commit | 34b745c784ffea6af05df362c879dc2a4afe4a75 (patch) | |
tree | 3b61e7dafd6df844a0016b80ffe5edc00fa3a9b0 /sys/dev/syscons | |
parent | 2e2a6d6a66a2df2598888e3b3e57b26464da1934 (diff) | |
download | FreeBSD-src-34b745c784ffea6af05df362c879dc2a4afe4a75.zip FreeBSD-src-34b745c784ffea6af05df362c879dc2a4afe4a75.tar.gz |
Sometimes the vty switching has to be delayed; the vty
to be switched to is saved in sc->delayed_next_scr and
the actual switch is performed later. It was possible
to get into the endless loop when attempting to switch
to a closed vty (which is not allowed and beep-alerted
when attempted) and when the visual beep was in effect.
This caused sc->delayed_next_scr to never be reset and
endless attempts to switch to a closed vty and endless
visual beeping. How to repeat:
- boot into single-user
- run "kbdcontrol -b visual"
- quickly press Alt+F2 two times
PR: kern/68016
X-MFC after: 6.2-RELEASE
Diffstat (limited to 'sys/dev/syscons')
-rw-r--r-- | sys/dev/syscons/syscons.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index 87ada19..403f527 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -2176,6 +2176,7 @@ sc_switch_scr(sc_softc_t *sc, u_int next_scr) DPRINTF(5, ("switch delayed\n")); return 0; } + sc->delayed_next_scr = 0; s = spltty(); cur_scp = sc->cur_scp; @@ -2320,7 +2321,6 @@ sc_switch_scr(sc_softc_t *sc, u_int next_scr) /* this is the start of vty switching process... */ ++sc->switch_in_progress; - sc->delayed_next_scr = 0; sc->old_scp = cur_scp; sc->new_scp = sc_get_stat(SC_DEV(sc, next_scr)); if (sc->new_scp == sc->old_scp) { |