Hi Takashi, can you please have a look? Thanks, Corinna On Jun 1 08:51, Ken Brown wrote: > On 5/31/2016 5:41 AM, Corinna Vinschen wrote: > > Any chance you could bisect Cygwin to help finding the culprit? > > The culprit is > > commit 252a07b0ad3353abcd0fcd9b1b65ff977acd679e > Author: Takashi Yano > Date: Fri Apr 3 13:07:35 2015 +0900 > > Cygwin hangs up if several keys are typed during outputting a lot of texts. > > * fhandler_tty.cc (fhandler_pty_slave::read): Change calculation of > "readlen" not to use "bytes_in_pipe" value directly. > > > Reverting that commit fixes the problem. To test, compile and run the attached file. > > $ gcc gdbstc.cc > > $ ./a > 1-inferior-tty-set /dev/pty3 > 2-gdb-set height 0 > 3-gdb-set non-stop 1 > 4-file-list-exec-source-files > 5-file-list-exec-source-file > 6-gdb-show prompt > 7-stack-info-frame > 8-thread-info > 9-break-list > q > *** using gdb > =thread-group-added,id="i1" > ~"GNU gdb (GDB) (Cygwin 7.10.1-1) 7.10.1\n" > ~"Copyright (C) 2015 Free Software Foundation, Inc.\n" > ~"License GPLv3+: GNU GPL version 3 or later \nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n" > ~"This GDB was configured as \"i686-pc-cygwin\".\nType \"show configuration\" for configuration details." > ~"\nFor bug reporting instructions, please see:\n" > ~".\n" > ~"Find the GDB manual and other documentation resources online at:\n.\n" > ~"For help, type \"help\".\n" > ~"Type \"apropos word\" to search for commands related to \"word\".\n" > =cmd-param-changed,param="auto-load safe-path",value="/" > (gdb) > ... > > In bad cases (bug present), the program hangs and doesn't complete until the gdb process is killed from a different terminal. In good cases it runs to completion. > > Ken > #include > #include > #include > #include > #include > #include > > void get_output (int fd); > > int > main (int argc, const char **argv) > { > int master; > pid_t pid; > > if ((pid = forkpty (&master, NULL, NULL, NULL)) < 0) > { > perror ("forkpty"); > exit (1); > } > /* child */ > if (pid == 0) > { > const char *av[100]; > // putenv ("HOME=/tmp"); > int i = 0; > #ifdef STRACE_GDB > av[i++] = "strace"; > av[i++] = "-o"; > av[i++] = "/tmp/strace.out"; > #ifdef __CYGWIN__ > av[i++] = "--mask=all+paranoid"; > #endif > #endif > av[i++] = argv[1] ?: "gdb"; > fprintf (stderr, "*** using %s\n", av[0]); > av[i++] = "-i=mi"; > av[i] = NULL; > execvp (av[0], (char * const *) av); > /* shouldn't get here */ > exit (1); > } > /* parent */ > const char *input[20]; > > int i = 0; > input[i++] = "1-inferior-tty-set /dev/pty3\n"; > input[i++] = "2-gdb-set height 0\n"; > input[i++] = "3-gdb-set non-stop 1\n"; > input[i++] = "4-file-list-exec-source-files\n"; > input[i++] = "5-file-list-exec-source-file\n"; > input[i++] = "6-gdb-show prompt\n"; > input[i++] = "7-stack-info-frame\n"; > input[i++] = "8-thread-info\n"; > input[i++] = "9-break-list\n"; > input[i++] = "q\n"; > input[i] = NULL; > > for (int i = 0; input[i]; ++i) > { > write (master, input[i], strlen (input[i])); > // sleep (1); > } > get_output (master); > wait (NULL); > } > > void > get_output (int fd) > { > char buf[4096]; > > while (1) > { > int nread = read (fd, buf, sizeof (buf)); > if (nread > 0) > write (STDOUT_FILENO, buf, nread); > else > { > printf ("No more output. nread %d\n", nread); > break; > } > } > } > > > -- > 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 -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Maintainer cygwin AT cygwin DOT com Red Hat