[PATCH] Cygwin: console: Release pipe_sw_mutex in pcon_hand_over_proc()
Corinna Vinschen
corinna-cygwin@cygwin.com
Thu Mar 26 09:21:27 GMT 2026
On Mar 25 22:06, Takashi Yano wrote:
> Currently, pipe_sw_mutex is held in the process which is running
> in console inherited from pseudo console until the process ends.
> Due to this behaviour, the process may cause deadlock when it
> attempts to acuqire input_mutex in set_input_mode() called via
acquire
> close_ctty(). This deadlock occurs because the pty master
> acuires input_mutex first and acuire pipe_sw_mutex next while
acquire acquire
> the process exiting acuire pipe_sw_mutex first.
acquire
> To avoid this deadlock, this patch releases pipe_sw_mutex in
> pcon_hand_over_proc(). In addition, pointless pipe_sw_mutex
> acquire/release is drppped in pcon_hand_over_proc().
>
> Fixes: 04f386e9af99 ("Cygwin: console: Inherit pcon hand over from parent pty")
> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
> Reviewed-by:
> ---
> winsup/cygwin/fhandler/console.cc | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/winsup/cygwin/fhandler/console.cc b/winsup/cygwin/fhandler/console.cc
> index 29cdba0d3..1dd5dfa1d 100644
> --- a/winsup/cygwin/fhandler/console.cc
> +++ b/winsup/cygwin/fhandler/console.cc
> @@ -1994,8 +1994,6 @@ fhandler_console::pcon_hand_over_proc (void)
> char buf[MAX_PATH];
> shared_name (buf, PIPE_SW_MUTEX, parent_pty);
> HANDLE mtx = OpenMutex (MAXIMUM_ALLOWED, FALSE, buf);
> - WaitForSingleObject (mtx, INFINITE);
> - ReleaseMutex (mtx);
> DWORD res = WaitForSingleObject (mtx, INFINITE);
> if (res == WAIT_OBJECT_0 || res == WAIT_ABANDONED)
> {
> @@ -2006,9 +2004,8 @@ fhandler_console::pcon_hand_over_proc (void)
> }
> else
> system_printf("Acquiring pcon_ho_mutex failed.");
> + ReleaseMutex (mtx);
> CloseHandle (parent_pty_input_mutex);
> - /* Do not release the mutex.
> - Hold onto the mutex until this process completes. */
> }
>
> bool
> --
> 2.51.0
Other than that, LGTM.
Thanks,
Corinna
More information about the Cygwin-patches
mailing list