Regression (last snapshot)

Ken Brown kbrown@cornell.edu
Wed Jul 31 18:00:00 GMT 2019


On 7/31/2019 11:53 AM, Ken Brown wrote:
> On 7/29/2019 2:55 PM, Ken Brown wrote:
>> Here's the error that I can reproduce easily in xterm:
>>
>> $ ls <(grep bash .bashrc)
>> /dev/fd/63
>> grep: write error: Broken pipe
>>
>> This happens 98% of the time.  Notice that I used plain 'ls' rather than the
>> original 'ls -lL'.  With the latter, I get the broken pipe error 60% of the time
>> rather than 98%:
>>
>> $ ls -lL <(grep bash .bashrc)
>> pr-------- 1 kbrown None 0 2019-07-29 14:46 /dev/fd/63
>> grep: write error: Broken pipe
>>
>> What about the explanation I tried earlier, but perhaps not clearly: ls prints
>> /dev/fd/63 and then exits, thereby closing the read end of the pipe, while grep
>> (running asynchronously) hasn't finished writing to the write end of the pipe.
>>
>> The fact that I get the broken pipe error more often with plain 'ls' than with
>> 'ls -lL' is consistent with that.  And the fact that I get no errors with 'cat
>> <(grep bash .bashrc)' is also consistent with it, since cat doesn't exit until
>> grep has finished writing.
>>
>> On the other hand, this doesn't explain why I see the error only under xterm,
>> nor does it explain why you can't reproduce it at all.
> 
> I've made some progress.  It turns out that the problem only occurs in terminals
> launched from the xwin-xdg-menu tray icon.  I can even launch a mintty window
> from that icon (System Tools -> Cygwin Terminal) and I'll see the problem.  On
> the other hand, I can launch an xterm without using that icon (e.g., 'DISPLAY=:0
> xterm -l&' from a mintty window) and I won't see the problem.
> 
> So the issue has something to do with how xwin-xdg-menu launches applications,
> and how that interacts with bash's process substitution.  I've just downloaded
> the xwin-xdg-menu source and will see if I can figure out what's going on.  I've
> also added Jon to the CC in case he has a chance to take a look.

OK, when xwin-xdg-menu launches an application, it creates two pipes and sets 
the application's stdout and stderr to the write ends of those pipes.  For 
example, here's what I see when I launch mintty from xwin-xdg-menu:

$ pgrep mintty
5375

$ ls -l /proc/5375/fd
total 0
lrwxrwxrwx 1 kbrown None 0 2019-07-31 13:37 0 -> /dev/null
lrwxrwxrwx 1 kbrown None 0 2019-07-31 13:37 1 -> pipe:[38654736160]
lrwxrwxrwx 1 kbrown None 0 2019-07-31 13:37 2 -> pipe:[42949703456]
lrwxrwxrwx 1 kbrown None 0 2019-07-31 13:37 3 -> /dev/ptmx
lrwxrwxrwx 1 kbrown None 0 2019-07-31 13:37 4 -> /dev/windows

These pipes are apparently used for logging.

I don't see how this would explain my observations (grep reporting a broken 
pipe), but it is at least a difference between a terminal started from 
xwin-xdg-menu and an "ordinary" terminal.

Anyway, I don't see any evidence here of a Cygwin bug.

Ken

--
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



More information about the Cygwin mailing list