From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-02.nifty.com (conssluserg-02.nifty.com [210.131.2.81]) by sourceware.org (Postfix) with ESMTPS id 1B5503858430 for ; Tue, 16 Nov 2021 09:45:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1B5503858430 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp Received: from Express5800-S70 (z221123.dynamic.ppp.asahi-net.or.jp [110.4.221.123]) (authenticated) by conssluserg-02.nifty.com with ESMTP id 1AG9jF8X012195 for ; Tue, 16 Nov 2021 18:45:15 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-02.nifty.com 1AG9jF8X012195 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1637055915; bh=EcbGJg5lyQVU6xwPZ0XGURvykvsTikGJszFb63xBTpQ=; h=Date:From:To:Subject:In-Reply-To:References:From; b=Lq8ng0FtwaD1D3NDHvg3r/dDqVDUt9Qd2I23dj95sp48h69wBt9AsTpJg0xJpjHXm IsaiRmqOZhuRzPckcy5OyIEEfqzVEH4L5ysCxIRPdmt1F7eX+HQS5SuoDMcJpYDHKg pNZdM5N7JZtc/J0XKaoxACYJh+Ww5KcGUtl0bg5xRE+C6uMvSFQo5GcnNuP7+VHQui dra/sDhIRCJ7FkMsME/p4HH/1r9xdY3RWzOgH7Bg8HIbImlvsk5I2KCUgsIi5GF8FF dp2xFN1MFV4etOJKj3e71oWYpffWchHdt0QM7q6jx6lJQ3cNhy2XGLGj1patyx7dny UEnDckbIGEjCw== X-Nifty-SrcIP: [110.4.221.123] Date: Tue, 16 Nov 2021 18:45:15 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: cygwin 3.3.x: another problem that may be related to pipes Message-Id: <20211116184515.c15092561825dc0180f667e0@nifty.ne.jp> In-Reply-To: <7d27160f-9084-22f5-630e-34edb0cac5c6@cornell.edu> References: <115203324.649908.1636923059546.ref@mail.yahoo.com> <115203324.649908.1636923059546@mail.yahoo.com> <20211115171811.844dce9cce2b4d13262d64f2@nifty.ne.jp> <20211115235021.0f0f64b1b0e2a7bd6d16be80@nifty.ne.jp> <9a7bdf86-0721-870f-b7ea-00d958967c98@cornell.edu> <20211116015239.57d5f981ffdb3196039258da@nifty.ne.jp> <3bf5793a-d9fe-6ca8-9812-d50fff3cffe9@cornell.edu> <20211116083544.88b6674b42deff69ba39db10@nifty.ne.jp> <7d27160f-9084-22f5-630e-34edb0cac5c6@cornell.edu> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Nov 2021 09:45:42 -0000 On Mon, 15 Nov 2021 18:49:34 -0500 Ken Brown wrote: > On 11/15/2021 6:35 PM, Takashi Yano wrote: > > On Mon, 15 Nov 2021 13:47:44 -0500 > > Ken Brown wrote: > >> On 11/15/2021 11:52 AM, Takashi Yano wrote: > >>> So, currently we have three options. > >>> > >>> 1) Call CancelIo() immediately after STATUS_PENDING like my patch. > >>> 2) Wait for pipe handle after STATUS_PENDING for nonblocking mode > >>> like Ken's patch. > >>> 3) Create evt event even for nonblocking mode as Corinna mentioned. > >>> > >>> Which is the best solution, do you think? > >> > >> I'm completely unbiased, of course, but I like option 2. > > > > OK. Shall I make a patch? Or would you like to do that? > > If you don't mind doing it, I'd appreciate it. I have a lot of Real Life things > going on at the moment and might not get to it for a couple days. Hi Ken, I noticed the following while fixing this issue. We now noticed that NtWriteFile() may return STATUS_PENDING even in nonblocking mode. If NtWriteFile() returns STATUS_PENDING in nonblocking mode, does not the following 'if' block in raw_write() refer to uninitialized io.Information? while (len1 > 0) { status = NtWriteFile (get_handle (), evt, NULL, NULL, &io, (PVOID) ptr, len1, NULL, NULL); if (evt || !NT_SUCCESS (status) || io.Information > 0 || len <= PIPE_BUF) break; len1 >>= 1; } 'evt' is false if we are in nonblocking mode. '!NT_SUCCESS(status)' is false if status == STATUS_PENDING. Then io.Information would be referred I think. Isn't this another bug in raw_write()? What should we do in this case? Should we do like: if (evt || !NT_SUCCESS (status) || status == STATUS_PENDING || io.Information > 0 || len <= PIPE_BUF) ? -- Takashi Yano