From owner-freebsd-bugs@FreeBSD.ORG Mon Sep 29 03:20:18 2003 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5715516A4B3 for ; Mon, 29 Sep 2003 03:20:18 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id D033644008 for ; Mon, 29 Sep 2003 03:20:17 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h8TAKHFY009320 for ; Mon, 29 Sep 2003 03:20:17 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h8TAKH7H009319; Mon, 29 Sep 2003 03:20:17 -0700 (PDT) (envelope-from gnats) Date: Mon, 29 Sep 2003 03:20:17 -0700 (PDT) Message-Id: <200309291020.h8TAKH7H009319@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: "Dan Langille" Subject: Re: kern/56274: pthreads does not return correct value at EOT X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Dan Langille List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Sep 2003 10:20:18 -0000 The following reply was made to PR kern/56274; it has been noted by GNATS. From: "Dan Langille" To: FreeBSD-gnats-submit@FreeBSD.org Cc: Subject: Re: kern/56274: pthreads does not return correct value at EOT Date: Mon, 29 Sep 2003 06:12:09 -0400 This patch passes all our testing. --- uthread_write.c.org Tue Sep 16 12:14:22 2003 +++ uthread_write.c Mon Sep 29 06:05:35 2003 @@ -93,7 +93,7 @@ * write: */ if (blocking && ((n < 0 && (errno == EWOULDBLOCK || - errno == EAGAIN)) || (n >= 0 && num < nbytes))) { + errno == EAGAIN)) || (n > 0 && num < nbytes))) { curthread->data.fd.fd = fd; _thread_kern_set_timeout(NULL); @@ -131,11 +131,15 @@ * If there was an error, return partial success * (if any bytes were written) or else the error: */ - } else if (n < 0) { + } else if (n <= 0) { if (num > 0) ret = num; else ret = n; + + if (n == 0) { + break; + } /* Check if the write has completed: */ } else if (num >= nbytes) -- Dan Langille : http://www.langille.org/