This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: mintty: Ctrl-Q does not work?
- From: Andy Koppe <andy dot koppe at gmail dot com>
- To: cygwin at cygwin dot com
- Date: Sat, 6 Oct 2012 05:48:44 +0100
- Subject: Re: mintty: Ctrl-Q does not work?
- References: <op.wk6rn9deofd6j1@nebbiolo> <5061B263.4090704@cs.utoronto.ca>
On 25 September 2012 14:32, Ryan Johnson wrote:
> On 25/09/2012 6:05 AM, Helmut Karlowski wrote:
>>
>> I type
>>
>> cat [some long ascii-file]
>>
>> then Ctrl-S (output stops), then Ctrl-Q (terminal hangs, can only be
>> terminated by closing the window).
>>
>> Using minty 1.1.2 and 1.7.16(0.262/5/3) 2012-07-20 22:55 i686 Cygwin
>>
>> Can anybody reproduce this?
>>
> Confirmed with mintty 1.1.1 and the same version of cygwin (w7-64). FWIW,
> doing it with `find .' rather than `cat' works fine.
The issue isn't specific to any of mintty, cat or Ctrl+S; for example,
I've managed to reproduce it with xterm, hexdump, and just hitting
Enter. Any other key that sends a keycode will do too. Ctrl+Q isn't
needed for the freeze to happen. In xterm I've even managed it with
find, by hitting Enter repeatedly.
If you then look at the situation in ps, you'll see something like this:
O 3396 1 3396 1472 ? 1004 05:11:07 /usr/bin/xterm
O 3528 4460 3528 528 pty3 1004 05:25:01 /usr/bin/cat
The interesting bit there is the two 'O's in the first column, which
means both processes are waiting to output. I think what's happening
is that both of them are trying to write to their side of the
underlying pty device, but that those writes are blocking until data
is read from the other side of the pty. Result: deadlock. If the cat
is killed (possibly with -9, because of its nine lives), the terminal
happily continues on its way.
So why doesn't this happen more often? Not sure. The speed difference
between the client process output and the terminal seems to play a
role here. I can only guess that the issue occurs if a buffer in the
pty's slave->master pipe overflows and something is written to the
master->slave pipe at the same time (which is unbuffered?).
I don't understand the pty implementation enough to verify any of
that, so cgf would need to comment further. Note besides: I couldn't
make this deadlock happen on Ubuntu.
Andy
--
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