aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2024-01-05 16:13:06 +0000
committerKyle Evans <kevans@FreeBSD.org>2024-01-05 16:13:06 +0000
commita68d5a66258e953ef6ccdbdd82e89572a3cc04f9 (patch)
tree2d2dd7b86ff0991f2fb6445891e15590990da16d /sys
parentf9b17005bf8f1a30e2a74a3e66c92e34aa87f9bf (diff)
Diffstat (limited to 'sys')
-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;
}