On Tue, 27 Feb 2007, Kostik Belousov wrote:

On Tue, Feb 27, 2007 at 02:51:41AM +0000, Greg Lehey wrote:
grog        2007-02-27 02:51:41 UTC

  FreeBSD src repository

  Modified files:
    share/man/man9       sleep.9
  Log:
  Add warning about deadlocks created by use of wakeup_one.

+.Fn wakeup_one
+does not work reliably if more than one process is sleeping on the same
+address;
+in this case it is possible for an unrelated process to be woken.
+This process will ignore the wakeup, and the correct process will never be
+woken.
+.Pp

Is this a bug (that should be fixed), or some fundamental issue with wakeup_one() ?

I'm also confused about this addition to the man page -- the sleep/wakeup model is premised on using a synchronization name space that we, for convenience, align with the possible pointer value name space. In general, the approach works because we tie memory ownership to use of a synchronization address. It sounds like wakeup_one() works entirely reliably, but that some piece of kernel code is sleeping on an address associated with memory it doesn't own. This is not a bug on wakeup_one(), it is a bug in a consumer of the sleep(9) APIs. I'd like to see this change backed out, and replaced with a note explicitly describing how the uniqueness of sleep/wakeup addresses is tied to memory allocation, and that improper use of the APIs can result in consumers behaving unreliably.

Robert N M Watson
Computer Laboratory
University of Cambridge
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to