cvs commit: src/sys/kern kern_lock.c

Alexander Kabaev kan at FreeBSD.org
Mon Aug 16 08:01:23 PDT 2004


kan         2004-08-16 15:01:22 UTC

  FreeBSD src repository

  Modified files:
    sys/kern             kern_lock.c 
  Log:
  Upgrading a lock does not play well together with acquiring an exclusive lock
  and can lead to two threads being granted exclusive access. Check that no one
  has the same lock in exclusive  mode before proceeding to acquire it.
  
  The LK_WANT_EXCL and LK_WANT_UPGRADE bits act as mini-locks and can block
  other threads.  Normally this is not a problem since the mini locks are
  upgraded to full locks and the release of the locks will unblock the other
  threads.  However if a thread reset the bits without obtaining a full lock
  other threads are not awoken. Add missing wakeups for these cases.
  
  PR:             kern/69964
  Submitted by:   Stephan Uphoff <ups at tree dot com>
  Very good catch by: Stephan Uphoff <ups at tree dot com>
  
  Revision  Changes    Path
  1.74      +12 -5     src/sys/kern/kern_lock.c


More information about the cvs-all mailing list