[PATCH] Cygwin: console: Release pipe_sw_mutex in pcon_hand_over_proc()

Takashi Yano takashi.yano@nifty.ne.jp
Thu Mar 26 11:37:46 GMT 2026


On Thu, 26 Mar 2026 10:21:27 +0100
Corinna Vinschen wrote:
> 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 for the review. Pushed.

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>


More information about the Cygwin-patches mailing list