cvs commit: src/sys/kern kern_event.c kern_fork.c src/sys/sys event.h

Konstantin Belousov kib at FreeBSD.org
Mon Jul 7 09:31:15 UTC 2008


kib         2008-07-07 09:30:11 UTC

  FreeBSD src repository

  Modified files:
    sys/kern             kern_event.c kern_fork.c 
    sys/sys              event.h 
  Log:
  SVN rev 180340 on 2008-07-07 09:30:11Z by kib
  
  The kqueue_register() function assumes that it is called from the top of
  the syscall code and acquires various event subsystem locks as needed.
  The handling of the NOTE_TRACK for EVFILT_PROC is currently done by
  calling the kqueue_register() from filt_proc() filter, causing recursive
  entrance of the kqueue code. This results in the LORs and recursive
  acquisition of the locks.
  
  Implement the variant of the knote() function designed to only handle
  the fork() event. It mostly copies the knote() body, but also handles
  the NOTE_TRACK, removing the handling from the filt_proc(), where it
  causes problems described above. The function is called from the fork1()
  instead of knote().
  
  When encountering NOTE_TRACK knote, it marks the knote as influx
  and drops the knlist and kqueue lock. In this context call to
  kqueue_register is safe from the problems.
  
  An error from the kqueue_register() is reported to the observer as
  NOTE_TRACKERR fflag.
  
  PR:     108201
  Reviewed by:    jhb, Pramod Srinivasan <pramod juniper net> (previous version)
  Discussed with: jmg
  Tested by:      pho
  MFC after:      2 weeks
  
  Revision  Changes    Path
  1.122     +67 -15    src/sys/kern/kern_event.c
  1.294     +2 -4      src/sys/kern/kern_fork.c
  1.39      +1 -0      src/sys/sys/event.h


More information about the cvs-src mailing list