X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org MIME-Version: 1.0 Date: Sat, 4 Apr 2009 15:11:06 -0700 Message-ID: Subject: TTY write deadlock From: Josh Stone To: cygwin AT cygwin DOT com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Hi, I've discovered a deadlock in Cygwin which is pretty easy to reproduce.=C2=A0 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=C3=B6dinger=E2=80=99s) 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/