On Thu, 3 May 2007, Alfred Perlstein wrote:

* Robert Watson <[EMAIL PROTECTED]> [070503 10:08] wrote:

Now process B is in an uninterruptable wait until the remote side drains the pipe.

The same problem might happen (even easier to reproduce) when there are multiple readers.

Of course this all depends on me missing something.

Can you explain?

You are entirely right -- I'm not sure how I missed the SB_NOINTR flag semantics in sb_lock(), but apparently I did. I'm talking to Attilio right now about adding an interruptible version of the sleeping exclusive lock acquire and will follow up on this shortly. Thanks for pointing this out!

OK, please do your usual awesome benchmarking though so that this potential fix doesn't wind up being a performance pessimizing stopgap.

Certainly. Attilio is working on producing patches to add signal-aware versions of the two sleeping locking primitives (sx_xlock and sx_slock) used here. Assuming this goes into CVS in the next day or so, I'll fix up the changes as-is; otherwise, I'll back them out until the necessary sx(9) extensions are in place.

I'm somewhat surprised that an attempt to move from sleep to cv based rendevous wasn't attempted first.

The goal of the exercise was to move from a custom locking primitive to a standard locking primitive. Replacing a hacked together lock constructed with signal and msleep with a hacked together lock constructed with condition variables and mutexes wouldn't improve the world a whole lot. Unfortunately, I overlooked the signal interruption bit of it, which requires minor extensions to sx(9) in order to address. Hopefully that will be done shortly.

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