cvs commit: src/sys/kern kern_umtx.c

David Xu davidxu at FreeBSD.org
Tue Nov 30 04:02:54 PST 2004


davidxu     2004-11-30 12:02:53 UTC

  FreeBSD src repository

  Modified files:
    sys/kern             kern_umtx.c 
  Log:
  1. use per-chain mutex instead of global mutex to reduce
     lock collision.
  2. Fix two race conditions. One is between _umtx_unlock and signal,
     also a thread was marked TDF_UMTXWAKEUP by _umtx_unlock, it is
     possible a signal delivered to the thread will cause msleep
     returns EINTR, and the thread breaks out of loop, this causes
     umtx ownership is not transfered to the thread. Another is in
     _umtx_unlock itself, when the function sets the umtx to
     UMTX_UNOWNED state, a new thread can come in and lock the umtx,
     also the function tries to set contested bit flag, but it will
     fail. Although the function will wake a blocked thread, if that
     thread breaks out of loop by signal, no contested bit will be set.
  
  Revision  Changes    Path
  1.17      +212 -115  src/sys/kern/kern_umtx.c


More information about the cvs-all mailing list