From owner-freebsd-bugs@FreeBSD.ORG Fri Feb 10 21:20:12 2012 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4844E1065670 for ; Fri, 10 Feb 2012 21:20:12 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 338538FC13 for ; Fri, 10 Feb 2012 21:20:12 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q1ALKCgb091544 for ; Fri, 10 Feb 2012 21:20:12 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q1ALKCGp091543; Fri, 10 Feb 2012 21:20:12 GMT (envelope-from gnats) Date: Fri, 10 Feb 2012 21:20:12 GMT Message-Id: <201202102120.q1ALKCGp091543@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Diomidis Spinellis Cc: Subject: Re: bin/164947: tee looses data when writing to non-blocking file descriptors X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Diomidis Spinellis List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Feb 2012 21:20:12 -0000 The following reply was made to PR bin/164947; it has been noted by GNATS. From: Diomidis Spinellis To: Martin Cracauer Cc: freebsd-gnats-submit@freebsd.org Subject: Re: bin/164947: tee looses data when writing to non-blocking file descriptors Date: Fri, 10 Feb 2012 23:17:03 +0200 On 10/02/2012 23:03, Martin Cracauer wrote: > Diomidis Spinellis wrote on Fri, Feb 10, 2012 at 10:32:02PM +0200: >> On 10/02/2012 21:17, Martin Cracauer wrote: >>> Diomidis Spinellis wrote on Fri, Feb 10, 2012 at 07:04:41AM +0000: >>>> >>>>> Number: 164947 >> [...] >> >>>>> How-To-Repeat: >>>> Run the following: >>>> #!/usr/local/bin/bash >>>> # bash needed for the>(...) functionality >>>> # ssh apparently sets O_NONBLOCK >>>> # Remove the 2>/dev/null to see tee complaining >>>> dd count=100000 if=/dev/zero | >>>> tee>(ssh localhost dd of=/dev/null) 2>/dev/null | >>>> (ssh localhost dd of=/dev/null) >>> >>> I don't think it is ssh that is causing this. If you use a named pipe >>> explicitly and hook ssh up to that the error doesn't appear. Seems to >>> be something that bash is doing there. >> >> I think the named pipe isolates the write fd from the ssh end. If you >> use cat or dd instead of ssh the problem goes away. > > Do you happen to know what bash does there, exactly? I was assuming it > is creating a named pipe behind the user's back. It is creating a normal pipe and providing it as an argument through /dev/fd. Try ls -l /dev/fd >(wc -l) > I noticed that if you do ssh on the "tee part" and something else on > the end of the regular pipe then things also fail. On the other hand > if you put the "tee part" on something else and the regular pipe on > ssh things never seem to fail. On 8.1 release I needed both ends to run ssh to see the problem. BTW The problem also manifests itself on Mac OS X and Linux :-)