svn commit: r303914 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Wed Aug 10 13:47:14 UTC 2016
Author: kib
Date: Wed Aug 10 13:47:12 2016
New Revision: 303914
URL: https://svnweb.freebsd.org/changeset/base/303914
Log:
Re-schedule signals after kthread exits, since apparently there are
processes which combine kernel and non-kernel threads, e.g. nfsd. For
such processes, termination of a kthread must recheck signal delivery
among other threads according to masks.
Reported and tested by: pho
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Modified:
head/sys/kern/kern_kthread.c
Modified: head/sys/kern/kern_kthread.c
==============================================================================
--- head/sys/kern/kern_kthread.c Wed Aug 10 13:44:03 2016 (r303913)
+++ head/sys/kern/kern_kthread.c Wed Aug 10 13:47:12 2016 (r303914)
@@ -320,11 +320,13 @@ void
kthread_exit(void)
{
struct proc *p;
+ struct thread *td;
- p = curthread->td_proc;
+ td = curthread;
+ p = td->td_proc;
/* A module may be waiting for us to exit. */
- wakeup(curthread);
+ wakeup(td);
/*
* The last exiting thread in a kernel process must tear down
@@ -337,9 +339,10 @@ kthread_exit(void)
rw_wunlock(&tidhash_lock);
kproc_exit(0);
}
- LIST_REMOVE(curthread, td_hash);
+ LIST_REMOVE(td, td_hash);
rw_wunlock(&tidhash_lock);
- umtx_thread_exit(curthread);
+ umtx_thread_exit(td);
+ tdsigcleanup(td);
PROC_SLOCK(p);
thread_exit();
}
More information about the svn-src-head
mailing list