aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_cons.c24
1 files changed, 5 insertions, 19 deletions
diff --git a/sys/kern/kern_cons.c b/sys/kern/kern_cons.c
index d4a858cb12fd..462cd0c45758 100644
--- a/sys/kern/kern_cons.c
+++ b/sys/kern/kern_cons.c
@@ -239,31 +239,15 @@ cnremove(struct consdev *cn)
{
struct cn_device *cnd;
int i;
- bool primary = true;
STAILQ_FOREACH(cnd, &cn_devlist, cnd_next) {
- if (cnd->cnd_cn != cn) {
- primary = false;
+ if (cnd->cnd_cn != cn)
continue;
- }
-
+ if (STAILQ_FIRST(&cn_devlist) == cnd)
+ ttyconsdev_select(NULL);
STAILQ_REMOVE(&cn_devlist, cnd, cn_device, cnd_next);
cnd->cnd_cn = NULL;
- /*
- * We only need to select a new console if we've removed all
- * consoles or if we're removing the primary console.
- */
- if (primary) {
- struct cn_device *next;
-
- next = STAILQ_FIRST(&cn_devlist);
- if (next == NULL)
- ttyconsdev_select(NULL);
- else
- ttyconsdev_select(next->cnd_cn->cn_name);
- }
-
/* Remove this device from available mask. */
for (i = 0; i < CNDEVTAB_SIZE; i++)
if (cnd == &cn_devtab[i]) {
@@ -372,6 +356,8 @@ sysctl_kern_console(SYSCTL_HANDLER_ARGS)
error = 0;
} else {
error = cnadd(cp);
+ if (error == 0)
+ cnselect(cp);
}
break;
}