svn commit: r358182 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Thu Feb 20 21:25:12 UTC 2020
Author: kib
Date: Thu Feb 20 21:25:12 2020
New Revision: 358182
URL: https://svnweb.freebsd.org/changeset/base/358182
Log:
Fix a bug in r358168, do not call sigfastblock_setpend() under a mutex.
PR: 244250
Reported and tested by: lwhsu
Sponsored by: The FreeBSD Foundation
Modified:
head/sys/kern/subr_trap.c
Modified: head/sys/kern/subr_trap.c
==============================================================================
--- head/sys/kern/subr_trap.c Thu Feb 20 21:12:10 2020 (r358181)
+++ head/sys/kern/subr_trap.c Thu Feb 20 21:25:12 2020 (r358182)
@@ -326,21 +326,23 @@ ast(struct trapframe *framep)
if (flags & TDF_NEEDSIGCHK || p->p_pendingcnt > 0 ||
!SIGISEMPTY(p->p_siglist)) {
sigfastblock_fetch(td);
- PROC_LOCK(p);
- mtx_lock(&p->p_sigacts->ps_mtx);
if ((td->td_pflags & TDP_SIGFASTBLOCK) != 0 &&
td->td_sigblock_val != 0) {
sigfastblock_setpend(td);
+ PROC_LOCK(p);
reschedule_signals(p, fastblock_mask,
- SIGPROCMASK_PS_LOCKED | SIGPROCMASK_FASTBLK);
+ SIGPROCMASK_FASTBLK);
+ PROC_UNLOCK(p);
} else {
+ PROC_LOCK(p);
+ mtx_lock(&p->p_sigacts->ps_mtx);
while ((sig = cursig(td)) != 0) {
KASSERT(sig >= 0, ("sig %d", sig));
postsig(sig);
}
+ mtx_unlock(&p->p_sigacts->ps_mtx);
+ PROC_UNLOCK(p);
}
- mtx_unlock(&p->p_sigacts->ps_mtx);
- PROC_UNLOCK(p);
}
/*
More information about the svn-src-all
mailing list