From 4f32adad48446d3ce891551a5c2c723ac6fdc739 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Mon, 6 Nov 2006 19:06:07 +0000 Subject: 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 --- sys/dev/syscons/syscons.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sys/dev') diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index 87ada19ff4aac..403f527e3262b 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) { -- cgit v1.3