X-Recipient: archive-cygwin AT delorie DOT com DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 86A663860C2C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1710049816; bh=m6B94HNAuivSkXsPKIYHU/tPp7GPk4VETagIbLHgtig=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=VUUTae2ySlEuKz20adHyQK4I3LLHgYmRY7nIVD5xWtUHTNv9qGNk2WJ4gSusFpg+q EN1DEOys8enL5uWmI4CReeTZ+x+DvznKp30HLEnUWerdKyg9MYBKJLrrXHBQx2CeSr C/YpFeQyJp4WMrUsZprnksoh81uUex65HlcT2Tcg= X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3A46E3858C66 ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 3A46E3858C66 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710049792; cv=none; b=NUVJgP6NT2LY0DSphRcwe4PtovguYs8XU3nre+wIiaNREFeuuASFfZcdpTYvJxCqu+pay0rCMt+8CYidz+o6xnV4pWAIqQwBusWVEuHCdO/a8U14ab48cESbbyxTcs/xbFLt+dF2JOWsl4BTmWtin+H9mROZYrh2Mj6PTrx75g0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710049792; c=relaxed/simple; bh=Tp0vf7Jfi+hfOy2Va7uD7rEe0SCstMGKdU4BVCJJAOE=; h=DKIM-Signature:Date:To:From:Subject:Message-ID:MIME-Version; b=PsoUi3x7cfzI/FMTjf9vC6fDM3EhiKnBuLL57HfF4SJKxmyEY4K4bLBLMNq2yLZVX4NmzR0pGzh4awSiGOfr/OTWHU0z4i2p/NhajmAALqnSXuM+ZxI8cvLO+i5wupnzVsZuNBf30BA4jwJ14mSasDAiDDbfdu4QhoCkN2WEQnk= ARC-Authentication-Results: i=1; server2.sourceware.org Date: Sun, 10 Mar 2024 05:49:43 +0000 To: "cygwin AT cygwin DOT com" Subject: Non-Cygwin programs touching a pipe's read side makes the write side unselectable Message-ID: <65KX60jlLVixJi4klNmiJe651YqfGN6DnUua5NFmrcg1EFKw89L5S6ovU0FuiUn1323xcDnoEMR0IztckkJuDByCvNrkWUQqr3CilAgWAWc=@protonmail.com> Feedback-ID: 23237294:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_W7rRgGmQaBo5sOQYfLv9dCNaMItISxJBaM9D19CIk" X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.30 List-Id: General Cygwin discussions and problem reports List-Archive: List-Post: List-Help: List-Subscribe: , From: wh via Cygwin Reply-To: wh Sender: "Cygwin" This is a multi-part message in MIME format. --b1_W7rRgGmQaBo5sOQYfLv9dCNaMItISxJBaM9D19CIk Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Here's how to reproduce this behavior. In test3.pl: #!/usr/bin/perl my $wfds =3D ''; vec($wfds, fileno(STDOUT), 1) =3D 1; sleep 1; print STDERR "selecting\n"; select undef, $wfds, undef, undef; print STDERR "ready\n"; print "abc\n"; Then run: # curl is as shipped with Windows, /cygdrive/c/Windows/system32/curl ./test3.pl | (curl --version && cat) Expected result: curl 8.4.0 (Windows) libcurl/8.4.0 Schannel WinIDN ... selecting ready abc Actual result: curl 8.4.0 (Windows) libcurl/8.4.0 Schannel WinIDN ... selecting (hang) Using strace on perl, it ends with 95 332358 [main] perl 733 clock_nanosleep: clock_nanosleep (1.000000000= ) 1004437 1336795 [main] perl 733 clock_nanosleep: 0 =3D clock_nanosleep(1, 0= , 1.000000000, 0.d) 247 1337042 [main] perl 733 time: 1710048216 =3D time(0x7FFFFCA00) 1010 1338052 [main] perl 733 fhandler_console::write: 0xA00051B10, 10 822 1338874 [main] perl 733 fhandler_console::write: 10 =3D fhandler_cons= ole::write(...) 203 1339077 [main] perl 733 write: 10 =3D write(2, 0xA00051B10, 10) 254 1339331 [main] perl 733 pselect: pselect (8, 0x0, 0xA000330E0, 0x0, 0= x0, 0x0) 207 1339538 [main] perl 733 pselect: to NULL, us -1 490 1340028 [main] perl 733 dtable::select_write: fd 1 191 1340219 [main] perl 733 select: sel.always_ready 0 --- Process 6888 (pid: 733) thread 784 created 859 1341078 [pipesel] perl 733 cygthread::stub: thread 'pipesel', id 0x31= 0, stack_ptr 0x2BBCCB0 192 1341270 [main] perl 733 select_stuff::wait: m 3, us 18446744073709551= 615, wmfo_timeout -1 196 1341466 [pipesel] perl 733 SetThreadName: SetThreadDescription() fail= ed. 00000000 10000000 Pipesel never comes back. Other info: - Replacing cat with tee (tee with no args is the same as cat) makes it wor= k. tee reads in smaller chunks, while cat reads at the pipe buffer size. Co= mments in select.cc suggest this is important, but I don't understand it al= l. - Removing the curl makes it work - Using curl