cvs commit: src/sys/kern sys_generic.c
jhb at freebsd.org
Thu Mar 1 19:44:16 UTC 2007
On Thursday 01 March 2007 14:20, Bruce M Simpson wrote:
> bms 2007-03-01 19:20:25 UTC
> FreeBSD src repository
> Modified files:
> sys/kern sys_generic.c
> Do not dispatch SIGPIPE from the generic write path for a socket; with
> this patch the code behaves according to the comment on the line above.
> Without this patch, a socket could cause SIGPIPE to be delivered to its
> process, once with SO_NOSIGPIPE set, and twice without.
> With this patch, the kernel now passes the sigpipe regression test.
> Tested by: Anton Yuzhaninov
> MFC after: 1 week
Pointy hat to: jhb
This crept in when I merged dofilewrite() with kern_writev() when pwritev()
was added. Prior to pwritev(), write() and pwrite() would DTRT, but writev()
also had the double-signal problem. Looks like the original bug is that when
SO_NOSIGPIPE was added, only dofilewrite() was updated, but not writev().
So, 4.x is fine, writev() is busted from 5.0 on, and write(), pwrite(), and
pwritev() are busted from 6.0 on.
More information about the cvs-src