kernel - Close small race in kqueue
authorMatthew Dillon <dillon@apollo.backplane.com>
Fri, 24 Sep 2010 00:24:53 +0000 (17:24 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Fri, 24 Sep 2010 00:24:53 +0000 (17:24 -0700)
commit8e8e1c56e4ab8226e7fcc3ee738f7f9b023f85ea
treef1f1e094ffc9385c6b7439845d8d41edfd65d7a3
parentd92165fe139fb6a316aba7258915741fdf3acaa3
kernel - Close small race in kqueue

* Normalize the kn_status reprocessing code to close a race.
  A knote_detach_and_drop() during a descriptor close can set
  KN_DELETING and return, leaving a knote undergoing processing
  by another thread marked deleted.

  If the other thread is trying to execute a filter the filter can
  wind up being run after the file pointer has been detached
  from the knote, resulting in a panic.

* All KN_DELETING and KN_WAITING flags also now set KN_REPROCESS and
  all KN_REPROCESS handling is dealt with the same way.  The filter
  is run if KN_REPROCESS is not set and if it is set any KN_DELETING
  and KN_WAITING flags are dealt with before the filter is run.
sys/kern/kern_event.c