X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-0.3 required=5.0 tests=BAYES_00,DATE_IN_PAST_06_12,SPF_HELO_PASS,TW_MK,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org To: cygwin AT cygwin DOT com From: Achim Gratz Subject: [Bug] Named Pipes (FIFO) / Bash Date: Sat, 22 Jan 2011 21:57:56 +0100 Lines: 70 Message-ID: <87ipxgirl7.fsf@Rainer.invalid> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) X-IsSubscribed: yes 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 I'm having problems with some bash scripts that were developed (not be me) and working OK in Cygwin 1.6.x versions, but not in 1.7.x (tested on 1.7.6, 1.7.7 and the latest snapshot). After some gnashing of teeth and pulling of hair I've whittled it down to a problem with named pipe handling in bash. Sifting through the archives of the mailing lists didn't provide much clues. I realize from earlier discussions that named pipes aren't fully supported, but some examples of programs and scripts seem to indicate that they should at least work on a basic level. I've tried both the current and the just announced experimental version of bash and both Windows7/CoreDuo and WinXP/TurionX2 (I don't think the dual cores have something to do with the problem, but if necessary I should be able to at least boot the WinXP machine with only a single core enabled). $ mkfifo /tmp/pipe $ ( sleep 10; echo -n "blafasel "; date; sleep 10; cat < /tmp/pipe )& $ echo -n "dingdong "; date; exec 6> /tmp/pipe; echo -n "blumblum "; date $ echo -n "hurrdurr " >&6; date Running this on Linux outputs as expected: dingdong Sa 22. Jan 20:41:45 CET 2011 blafasel Sa 22. Jan 20:41:55 CET 2011 blumblum Sa 22. Jan 20:42:05 CET 2011 hurrdurr Sa 22. Jan 20:42:05 CET 2011 On Cygwin, I get this: dingdong Sa 22. Jan 20:41:45 CET 2011 blumblum Sa 22. Jan 20:41:45 CET 2011 blafasel Sa 22. Jan 20:41:55 CET 2011 cat: -: Communication error on send In other words, opening the pipe is non-blocking, even though no listener is present. Listing /proc/self/fd lists fd 6 as opened to FIFO /tmp/pipe, but any output to it blocks indefinitely. I believe that the FIFO has in fact never been opened as far as the system is concerned. The output then blocks on the apparently not-open FIFO (I should be getting a SIGPIPE instead when trying to write into a pipe that has no listener). Note: Looking at the problematic scripts I realize that the opening of the FIFO must have been non-blocking in 1.6.x as well, but the output was just blocked until the listener became available. The last message goes away if I replace the "cat <" with simply "cat" (this seems to be a separate bug in redirection handling of named pipes which I could easily work around), but the shell still hangs up hard. A ps in another shell shows that bash is waiting for output and cat is waiting for input. I can then, however, write into the pipe from a second shell and have the ouput appear in the tty of the first. If I reverse the course of things and let the cat out first, so to speak, then (and only then) everything works in a single shell. This however requires the very serialization that the named pipe was supposed to provide. I'd be grateful for any insights and/or ideas for possible workarounds. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Samples for the Waldorf Blofeld: http://Synth.Stromeko.net/Downloads.html#BlofeldSamplesExtra -- 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