From 492fea0e9ba38d1c790c8adbf62fdeb356dae1ae Mon Sep 17 00:00:00 2001 From: guenther Date: Sun, 13 Jul 2014 14:56:56 +0000 Subject: [PATCH] If the only process in the pgrp is in the middle of exiting, it might not have any threads left. Treat that the same as an empty pgrp. encountered by and ok deraadt@ --- sys/kern/tty.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/kern/tty.c b/sys/kern/tty.c index 2fb04ad11aa..41b42bab418 100644 --- a/sys/kern/tty.c +++ b/sys/kern/tty.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tty.c,v 1.111 2014/07/12 18:43:32 tedu Exp $ */ +/* $OpenBSD: tty.c,v 1.112 2014/07/13 14:56:56 guenther Exp $ */ /* $NetBSD: tty.c,v 1.68.4.2 1996/06/06 16:04:52 thorpej Exp $ */ /*- @@ -2149,7 +2149,7 @@ ttyinfo(struct tty *tp) else if (tp->t_pgrp == NULL) ttyprintf(tp, "no foreground process group\n"); else if ((pr = LIST_FIRST(&tp->t_pgrp->pg_members)) == NULL) - ttyprintf(tp, "empty foreground process group\n"); +empty: ttyprintf(tp, "empty foreground process group\n"); else { const char *state; fixpt_t pctcpu, pctcpu2; @@ -2219,6 +2219,8 @@ update_pickpr: * Otherwise take the newest thread */ pick = p = TAILQ_FIRST(&pickpr->ps_threads); + if (p == NULL) + goto empty; run = p->p_stat == SRUN || p->p_stat == SONPROC; pctcpu = p->p_pctcpu; while ((p = TAILQ_NEXT(p, p_thr_link)) != NULL) { -- 2.20.1