From owner-freebsd-threads@FreeBSD.ORG Wed Mar 15 11:10:23 2006 Return-Path: X-Original-To: freebsd-threads@hub.freebsd.org Delivered-To: freebsd-threads@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EA73916A44E for ; Wed, 15 Mar 2006 11:10:23 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id AC7C243D55 for ; Wed, 15 Mar 2006 11:10:22 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k2FBAMkr065617 for ; Wed, 15 Mar 2006 11:10:22 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k2FBAM65065616; Wed, 15 Mar 2006 11:10:22 GMT (envelope-from gnats) Resent-Date: Wed, 15 Mar 2006 11:10:22 GMT Resent-Message-Id: <200603151110.k2FBAM65065616@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-threads@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Sven Berkvens-Matthijsse Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DA84616A400 for ; Wed, 15 Mar 2006 11:09:54 +0000 (UTC) (envelope-from sven@serv7.ilse.net) Received: from serv1.ilse.net (serv1.ilse.net [62.69.160.11]) by mx1.FreeBSD.org (Postfix) with ESMTP id 350C843D49 for ; Wed, 15 Mar 2006 11:09:53 +0000 (GMT) (envelope-from sven@serv7.ilse.net) Received: from serv7.ilse.net (serv7.ilse.net [10.1.8.17]) by serv1.ilse.net (8.12.10/8.10.2) with ESMTP id k2FB9p8L067907 for ; Wed, 15 Mar 2006 12:09:52 +0100 (MET) Received: (from sven@localhost) by serv7.ilse.net (8.13.3/8.11.1) id k2FB9pCN037532; Wed, 15 Mar 2006 12:09:51 +0100 (CET) (envelope-from sven) Message-Id: <200603151109.k2FB9pCN037532@serv7.ilse.net> Date: Wed, 15 Mar 2006 12:09:51 +0100 (CET) From: Sven Berkvens-Matthijsse To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: threads/94467: send(), sendto() and sendmsg() are not correct in libc_r X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Sven Berkvens-Matthijsse List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Mar 2006 11:10:24 -0000 >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@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. >How-To-Repeat: sendto() using a socket and try to write 1 MB of data, for example. >Fix: Working on this one... will post a patch when available. >Release-Note: >Audit-Trail: >Unformatted: