From 0a8cb339c3fc968720a3a61ef4613d05badcabb9 Mon Sep 17 00:00:00 2001 From: kib Date: Fri, 5 Jun 2015 08:26:38 +0000 Subject: MFC r283745: Do not raise priority of the idle thread on singal delivery. --- sys/kern/kern_sig.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 4ada0e4..6035045 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -2371,9 +2371,12 @@ tdsigwakeup(struct thread *td, int sig, sig_t action, int intrval) thread_lock(td); /* * Bring the priority of a thread up if we want it to get - * killed in this lifetime. + * killed in this lifetime. Be careful to avoid bumping the + * priority of the idle thread, since we still allow to signal + * kernel processes. */ - if (action == SIG_DFL && (prop & SA_KILL) && td->td_priority > PUSER) + if (action == SIG_DFL && (prop & SA_KILL) != 0 && + td->td_priority > PUSER && !TD_IS_IDLETHREAD(td)) sched_prio(td, PUSER); if (TD_ON_SLEEPQ(td)) { /* @@ -2411,7 +2414,7 @@ tdsigwakeup(struct thread *td, int sig, sig_t action, int intrval) /* * Give low priority threads a better chance to run. */ - if (td->td_priority > PUSER) + if (td->td_priority > PUSER && !TD_IS_IDLETHREAD(td)) sched_prio(td, PUSER); wakeup_swapper = sleepq_abort(td, intrval); -- cgit v1.1