cvs commit: src/sys/kern uipc_debug.c uipc_sockbuf.c
uipc_socket.c
uipc_syscalls.c src/sys/netinet sctputil.c src/sys/sys socketvar.h
Robert Watson
rwatson at FreeBSD.org
Thu May 3 20:30:17 UTC 2007
On Thu, 3 May 2007, Alfred Perlstein wrote:
> * Robert Watson <rwatson at FreeBSD.org> [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
More information about the cvs-src
mailing list