Web lists-archives.com

Re: bash pipe race condition




On 10/2/2017 9:06 PM, Matthew McGIllis wrote:

> 
> If I use the same code from bash I get:
> 
> $ ./input.exe | ./simple.exe
> line1
> <—— Hangs indefinitely until you kill it or ctrl-c
> 
> Some how if input has a delay between its line output then things will get hung, if you remove the sleep from the input things work, add the sleep in it fails.
> 
> 
> input.exe is generate from input.vb using: vbc input.vb
> 
>  input.vb file:
> Module input
>   Sub Main()
>     Console.Out.WriteLine("line1")
>     Threading.Thread.Sleep(2000)
>     Console.Out.WriteLine("line2")
>   End Sub
> End Module
> 
> simple.exe is generated from simple.vb using: vbc simple.vb
> 
> simple.vb file:
> Module simple
>   Sub Main()
>     Dim line As String
>     line = Console.In.ReadLine()
>     Do Until line Is Nothing
>       Console.Out.WriteLine(line)
>       line = Console.In.ReadLine()
>     Loop
>   End Sub
> End Module
> 
> Microsoft (R) Visual Basic Compiler version 11.0.50938.18408
> 
> The above problem was found when attempting to use cygwin perl using IPC::Open2 to control stdin and stdout of a VB program. So this may not be a bash specific issue but some sort of generic pipe issue in cygwin.

It is a known issue of the PTY emulation between a Cygwin runtime and a
Windows runtime enabled app.  It just cannot be fixed.  You're even
lucky that it works in the Windows command shell.  Either convert
simple.vb to simple.c and use Cygwin's gcc to build it or create a
Windows runtime version of input.exe.

-- 
cyg Simple

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