This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Regression (last snapshot)


On 7/29/2019 9:47 AM, Corinna Vinschen wrote:
> On Jul 29 13:18, Ken Brown wrote:
>> On 7/29/2019 4:45 AM, Corinna Vinschen wrote:
>>> On Jul 27 15:24, Ken Brown wrote:
>>>> On 7/27/2019 6:21 AM, Houder wrote:
>>>>> On Fri, 26 Jul 2019 22:12:43, Ken Brown  wrote:
>>>>>
>>>>>> On 7/22/2019 2:47 PM, Houder wrote:
>>>>>
>>>>>>> The specific regression as reported, has gone.
>>>>>>>
>>>>>>> 64-@@ uname -a
>>>>>>> CYGWIN_NT-6.1 Seven 3.1.0s(0.339/5/3) 2019-07-22 16:43 x86_64 Cygwin
>>>>>>> 64-@@ ls -lL <(grep bash .bashrc)
>>>>>>> pr-------- 1 Henri None 0 Jul 22 20:36 /dev/fd/63
>>>>>>
>>>>> Over all the behavior has simularity w/ the error reported by David Karr:
>>>>>
>>>>>        https://cygwin.com/ml/cygwin/2019-07/msg00150.html
>>>>>        ( Piping input from subprocess loses track of temp file )
>>>> [...]
>>>> Repeating this under the 20190722 or 20190725 snapshots gave slightly worse
>>>> results (close to 500 errors).  Using my own unoptimized build of cygwin1.dll,
>>>> the error count went up to about 650.
>>>
>>> I just tried this myself and I can't reproduce the problem.  1000 runs,
>>> no error.
>>
>> Interesting.  And you ran this under X11 in an xterm window?
> 
> I didn't, but I just did and the result is the same, no errors.
> 
>>>> I tried running under gdb, but I couldn't get grep to fail.  More precisely, I
>>>> didn't see an error message from grep.  Every run looked like this:
>>>>
>>>> $ gdb bash
>>>> GNU gdb (GDB) (Cygwin 8.2.1-1) 8.2.1
>>>> [...]
>>>> (gdb) r -c 'ls -lL <(grep bash .bashrc)'
>>>> Starting program: /usr/bin/bash -c 'ls -lL <(grep bash .bashrc)'
>>>> [...]
>>>> pr-------- 1 kbrown None 0 2019-07-27 11:07 /dev/fd/63
>>>> [...]
>>>> [Inferior 1 (process 21712) exited normally]
>>>>
>>>> It would be better to be able to debug ls and/or grep, but I don't know how to
>>>> get to subprocesses in gdb.  And I think I have to start with 'gdb bash' in
>>>> order for the process substitution to happen.
>>>
>>> Yeah, subprocess debugging is a problem in GDB.  Given how this works,
>>> you can at least take grep out of the picture.  Bash is doing all the
>>> lifting, so it's just bash and ls.   Did you try to reproduce this under
>>> strace?
>>
>> Yes, but there I get an error (even under mintty) for a different reason:
>>
>> $ strace -o trace.out ls -lL <(grep bash .bashrc)
>> ls: cannot access '/dev/fd/63': No such file or directory
> 
> No, please run bash:
> 
>    strace -o trace.out bash -c 'ls -lL <(grep bash .bashrc)'
> 
> Otherwise there's no process actually creating the pipe, given the <()
> expression is a bash expression.

Yes, of course.  I should have realized this since it's exactly what I did under 
gdb.  Anyway, the result is the same as it was under gdb: If I run the command 
under strace, I don't see the broken pipe error.

Is it possible that debugging causes an fd to the read end of the pipe to stay 
open longer, thereby preventing the error?

Ken

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]