This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

TTY write deadlock


Hi,

I've discovered a deadlock in Cygwin which is pretty easy to
reproduce. This seems to happen on all of the console windows I can
find, except for running in a normal cmd.exe.  All of these are
affected though: xterm, rxvt, mintty, puttycyg+cthelper, and putty
localhost -> cygwin sshd.

To reproduce, run a command that produces a lot of output -- "man -P
cat bash" works well.  While it's thinking about formatting that, just
start mashing the keyboard.  When it starts writing out the manpage
while you're still mashing keys, it will lock up (100% of the time for
me).  You can kill the (SchrÃdingerâs) cat and life will be ok again.

I did some debugging and found that the terminal was stuck on
acquire_output_mutex in fhandler_pty_master::doecho.  The cat process
had fhandler_tty_slave::write in its backtrace, so it was holding the
write mutex.  The cat won't release the mutex until its data is read,
but the terminal won't read until after it acquires the mutex and
finishes doecho.

This is on cygwin-1.7.0-45, but I can reproduce it on the 1.5 series
too.  And since it happens on so many terminals and even sshd, I don't
think we can say it's the application's fault.  I can't reproduce it
with a command like "man bash | cat" though, probably because the
difference in line buffering makes the race harder to hit.

I'm happy to help more with debugging, or I'll even try to write a
patch if someone can suggest a good way to resolve this deadlock...

Thanks,

Josh


(PS - I'm not subscribed to the list, so please CC me with replies...)

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]