X-Recipient: archive-cygwin AT delorie DOT com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:date:from:mime-version:to:subject :references:in-reply-to:content-type:content-transfer-encoding; q=dns; s=default; b=kONnN5iqny2GmNaM6IKWBlvyvkI7RvJvoZE3fqXG8GR reAqT5Ecyp/Prju0HUuc8dMQDrBfOxx1PfNo7uRngNPRBOyWDrLkVJnpksCoQGz4 ZZhzApI+6WeYiGhzpNZQGtHIypOJomc6FjuKHnBNNJ9lfZjbtn5HrFCzUgWBB6QE = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:date:from:mime-version:to:subject :references:in-reply-to:content-type:content-transfer-encoding; s=default; bh=xtO6EGaDDzWf3HxPVlync3MS9Y0=; b=rpgsYUIag7uy25Zk7 swjNyEsBBeQqTtsWR0shBdaluv1EweM7G92NH1D+Ue9W8Lhzuatu1vqMIo/iFICS 0N4Ev9Y5ne3RCLedAH8+W8CQS/VCyFOQL01jtb3NjBwW+tv74gcsoBVxZJ79xtuB 5GieXzJe69HXT8/3dEFvrY7HZM= Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 X-HELO: mout.kundenserver.de Message-ID: <54E660F1.3040509@towo.net> Date: Thu, 19 Feb 2015 23:17:21 +0100 From: Thomas Wolff User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: Clearing O_NONBLOCK from a pipe may lose data References: <20150218220859 DOT 1e8f8b19 AT tukaani DOT org> <20150219095147 DOT GC26084 AT calimero DOT vinschen DOT de> In-Reply-To: <20150219095147.GC26084@calimero.vinschen.de> X-TagToolbar-Keys: D20150219231721503 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-UI-Out-Filterresults: notjunk:1; X-IsSubscribed: yes Am 19.02.2015 um 10:51 schrieb Corinna Vinschen: > On Feb 18 22:08, Lasse Collin wrote: >> (Please Cc me when replying, I'm not subscribed to the list.) >> >> Hi! >> >> I suspect that there is a bug in Cygwin: >> >> 1. Create a pipe with both ends in blocking mode (O_NONBLOCK >> is not set). >> 2. The writer sets its end to non-blocking mode. >> 3. The writer writes to the pipe. >> 4. The writer restores its end of the pipe to blocking mode >> before the reader has read anything from the pipe. >> 5. The writer closes its end of the pipe. >> 6. The reader reads from the pipe in blocking mode. The last >> bytes written by the writer never appear at the reader, >> thus data is silently lost. >> >> Omitting the step 4 above makes the problem go away. > I can imagine. A few years back, when changing the pipe code to > using overlapped IO, we stumbled over a problem in Windows. When > closing an overlapped pipe while I/O is still ongoing, Windows > simply destroys the pipe buffers without flushing the data to the > reader. This is not much of a problem for blocking IO, but it > obviously is for non-blocking. > > The workaround for this behaviour is this: If the pipe is closed, and > this is the writing side of a nonblocking pipe, a background thread gets > started which keeps the overlapped structure open and continues to wait > for IO completion (i.e. the data has been sent to the reader). > > However, if you switch back to blocking before closing the pipe, the > aforementioned mechanism does not kick in. Could not "switching back to blocking" simply be handled like closing as far as the waiting is concerned, thus effectively flushing the pipe buffer? ------ Thomas -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple