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();
 }
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to