threads/94467: send(), sendto() and sendmsg() are not correct in libc_r

Daniel Eischen deischen at freebsd.org
Wed Mar 15 14:16:09 UTC 2006


On Wed, 15 Mar 2006, Sven Berkvens-Matthijsse wrote:

>
> >Number:         94467
> >Category:       threads
> >Synopsis:       send(), sendto() and sendmsg() are not correct in libc_r
> >Confidential:   no
> >Severity:       serious
> >Priority:       medium
> >Responsible:    freebsd-threads
> >State:          open
> >Quarter:
> >Keywords:
> >Date-Required:
> >Class:          sw-bug
> >Submitter-Id:   current-users
> >Arrival-Date:   Wed Mar 15 11:10:21 GMT 2006
> >Closed-Date:
> >Last-Modified:
> >Originator:     Sven Berkvens-Matthijsse
> >Release:        FreeBSD 4.10-STABLE i386
> >Organization:
> ilse media BV
> >Environment:
> System: FreeBSD serv7.ilse.net 4.10-STABLE FreeBSD 4.10-STABLE #23: Wed Aug 4 15:18:52 CEST 2004 root at tango.ilse.net:/usr/obj/usr/src/sys/BAROQUE i386
>
> >Description:
> 	send(), sendto() and sendmsg() can return prematurely in the libc_r
> 	implementation. If the socket has space available, but not enough to
> 	accommodate the whole data block at once, the kernel's sendto() will
> 	return with a premature byte count, because all the sockets are always
> 	put into nonblocking mode. However, unlike write(), which does
> 	implement this correctly, the implementation of sendto() and co do not
> 	check for this condition if the thread's notion of the socket was
> 	non-blocking. Instead, it just returns the permature bytecount instead
> 	of starting another sendto()/sendmsg() to complete the action (and
> 	possibly putting the thread to sleep until poll() says it's okay to
> 	try again), like a non-blocking version should.

We're not maintaining libc_r any longer, and 4.x is pretty
much a dead branch.  If you need bug fixes, you need to upgrade
to 6.x stable and use libpthread or libthr.

-- 
DE



More information about the freebsd-threads mailing list