From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7868) id AB192385843E; Sun, 13 Feb 2022 15:18:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AB192385843E Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Takashi Yano To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: pty: Prevent deadlock on echo output. X-Act-Checkin: newlib-cygwin X-Git-Author: Takashi Yano X-Git-Refname: refs/heads/master X-Git-Oldrev: b04aea00f1bb503dcc364c83ee3ef3da3bc1305e X-Git-Newrev: bddd9c1c417e97791c44241cf94753e90464501c Message-Id: <20220213151839.AB192385843E@sourceware.org> Date: Sun, 13 Feb 2022 15:18:39 +0000 (GMT) X-BeenThere: cygwin-cvs@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component git logs List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 13 Feb 2022 15:18:39 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3Dbddd9c1c417= e97791c44241cf94753e90464501c commit bddd9c1c417e97791c44241cf94753e90464501c Author: Takashi Yano Date: Thu Feb 10 17:22:11 2022 +0900 Cygwin: pty: Prevent deadlock on echo output. =20 - If the slave process writes a lot of text output, doecho() can cause deadlock. This is because output_mutex is held in slave:: write() and if WriteFile() is blocked due to pipe full, doecho() tries to acquire output_mutex and gets into deadlock. With this patch, the deadlock is prevented on the sacrifice of atomicity of doecho(). Diff: --- winsup/cygwin/fhandler_tty.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index 7bef6958c..7e065c46a 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -496,11 +496,9 @@ void fhandler_pty_master::doecho (const void *str, DWORD len) { ssize_t towrite =3D len; - acquire_output_mutex (mutex_timeout); if (!process_opost_output (echo_w, str, towrite, true, get_ttyp (), is_nonblocking ())) termios_printf ("Write to echo pipe failed, %E"); - release_output_mutex (); } =20 int