Hi cygwin users,

I have cli program that I run with mintty. It is a simple C++ program, reading 
from cin and outputing to cout. It is cross-compiled as a mingw program. I've 
been running it without problems fro over 2 years. Recently, I updated cygwin 
to 3.1.4-1 and noticed the pcon support. Since then, the output of my program 
has been messy: output lines have intermittent gaps in them. I made a simple 
test case that reproduces the problem, from the following simple C++ file, 
hello.cpp :

#include <iostream>
using namespace std;
static string Green             = "\033[32m";
static string Yellow    = "\033[33m";
static string Reset             = "\033[0m";
int main (int pArgc, char* pArgv[])
{
        cout << "Hello!" << endl;
        string answer;
        do
        {
                cout << Yellow << "q to Quit, p to Print " << Reset;
                cin >> answer;
                cout << Yellow << "You answered: " << Reset << answer << endl;
                if (answer[0] == 'p')
                {
                        for (int i = 0; i < 30; ++i)
                        {
                                cout << Green << i << "\tA simple line of 
printing in green characters." << Reset << endl;
                        }
                }
        } while (answer[0] != 'q');
        cout << "Goodbye." << endl;
        return 0;
}

Compiled with:
x86_64-w64-mingw32-c++ -g hello.cpp -o hello -static-libgcc -static-libstdc++ 
-Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic

When run in mintty, it prompts you to answer q or p . q quits the program, p 
prints 30 times the same line of green text. 

With the new pcon support, often, everything is correct: 30 lines of green text 
are outputted correctly; but most of the time a few lines will have gaps in 
them or show a partial escape sequence, like this:

You answered: p
0  A simple line of printing in green characters.
1  A simple line of printing in green characters.
2  A simple line of printing in green characters.
3  A simple line of printing in green characters.
4  A simple line of printing in green characters.
5  A simple line of printing in green characters.
6  A simple line of printing in green characters.
7  A simple line of printing in green characters.
8  A simple line of printing in green characters.
9  A simple line of printing in green characters.
10 A simple line of printing in green characters.
11 A simple line of printing in green characters.
12 A simple line of printing in green characters.
13 A simple line of printing in green characters.
14 A simple line of printing in green characters.
15 A simple line of printing in green characters.
16 A simple line of printing in green characters.
17 A simple line of printing in green characters.
18 A simple line of printing in green characters.
19 A simple line of printing in green characters.
20 A simple line of printing in green characters.
21 A simple line of printing in green characters.
22 A simple line of printing in green characters.
23 A simple line of printing in green characters.
24 A simple line of printing in green characters.
25 A simple line of printing in green characters.
26 A simple line of printing in green characters.
27 A simple line of printing in green characters.
28 A simple line of printing in green characters.
 [32m29 A simple line of printing in green characters.
q to Quit, p to Print          p
You answered: p
0  A simple line of printing in green characters.
1  A simple line of printing in green characters.
2  A simple line of printing in green characters.
3  A simple line of printing in green characters.
4  A simple line of printing in green characters.
5  A simple line of printing in green characters.
6  A simple line of printing in green characters.
7  A simple line of printing in green characters.
8  A simple line of printing in green characters.
9  A simple line of printing in green characters.
10 A simple line of printing in green characters.
11 A simple line of printing in green characters.
12 A simple line of printing in green characters.
13 A simple line of printing in green characters.
14 A simple line of printing in green characters.
15 A simple line of printing in green characters.
16 A simple line of printing in green characters.
17 A simple line of printing in green characters.
18 A simple line of printing in green characters.
19 A simple line of printing in green characters.
20 A simple line of printing in green characters.
21 A simple line of printing in green characters.
22 A simple line of printing in green characters.
23 A simple line of printing in green characters.
24 A simple line of printing in green characters.
25 A simple line of printing in green characters.
26 A simple line of printing in green characters.
27 A simple line of printing in green characters.
28 A simple line of printing in green characters.
     29 A simple line of printing in green characters.
q to Quit, p to Print          q


If I start mintty with CYGWIN=disable_pcon and run the hello program in it, 
everything is fine and the program always outputs correctly, as it did before I 
updated cygwin.

CYGWIN=disable_pcon /usr/bin/mintty &

OK, no big deal then, I'll make a small bash script to automate this: hellobash

#/bin/bash
CYGWIN=disable_pcon /usr/bin/mintty absolutePath/hello.exe &

This is where it gets weird. Running ./hellobash sometimes gets the hello 
program run correctly. It accepts input and displays output as expected. But in 
about 1 in 5 runs, it will not accept input. A prompt is displayed, but no 
cursor is shown and typing produces nothing.  ^C does not stop the program. 
Weirder: in about 1 in 20 to 30 runs, it's the converse: it will be stuck in a 
loop as if input was continuously feed to it, even if you don't type anything.

Output of cygcheck -c is attached.

Regards,

- André Bleau



Attachment: cygcheck.out
Description: cygcheck.out

--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to