Cygwin hangs up if several keys are typed during outputting a lot of texts.

Takashi Yano takashi.yano@nifty.ne.jp
Wed Mar 4 11:36:00 GMT 2015


On Mon, 2 Mar 2015 15:44:26 +0100
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> > 1) Buffer of named pipe gets full-filled by a lot of data written
> >   by slave side.
> > 2) WriteFile() in fhandler_pty_master::doecho(), which is called
> >   from master side by key input, is blocked because the buffer
> >   is full.
> > 3) If a handling to read from the pipe is in the same thread as
> >   key input, the thread falls into deadlock.
> > 
> > To check buffer space before WriteFile() is one idea,
> > but it is not smart, I suppose...
> 
> I think that's not it.  For testing I added code to convert the
> WriteFile calls in fhandler_pty_slave::write, fhandler_pty_master::doecho
> and fhandler_pty_slave::write to overlapped I/O and made sure to wait
> for the result after the output mutex has been released.
> 
> This change has no effect at all.  Looks like this needs some more
> digging.

Hmm.

To confirm my assumption, I have modified the TTY code
for testing. The modification is shown in an attached
diff-file against current CVS version. (Note that this
patch is not for fixing the problem. It is for just a
testing.)

With this modification, half of buffer is kept empty
for fhandler_pty_master::doecho(). I assumed the blocking
could be avoided because buffer is always free.

As a result of the test, it has become clear that this
modification conceals the problem. This means the problem
is closely related to occupancy of buffer.

Now, I suppose the cause has been clarified. So we have
to work out a solution. How can we resolve this problem?

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cygwin-test.patch.20150304
Type: application/octet-stream
Size: 7665 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin/attachments/20150304/101ec36b/attachment.obj>
-------------- next part --------------
--
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


More information about the Cygwin mailing list