[PATCH v7 3/7] Cygwin: console: Use input_mutex in the parent PTY in master thread
Takashi Yano
takashi.yano@nifty.ne.jp
Wed Mar 25 13:04:09 GMT 2026
If the console is originating from pseudo console, the input into
console is comming from PTY master. Therefore, input_mutex in PTY
can be used to avoid conflicts between fhandler_pty_master::write()
and cons_master_thread(). With this patch, use parent input_mutex
as well as input_mutex in console device in cons_master_thread().
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 | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/winsup/cygwin/fhandler/console.cc b/winsup/cygwin/fhandler/console.cc
index 9678775d1..29cdba0d3 100644
--- a/winsup/cygwin/fhandler/console.cc
+++ b/winsup/cygwin/fhandler/console.cc
@@ -63,6 +63,7 @@ fhandler_console::console_state NO_COPY
static bool NO_COPY inside_pcon_checked = false;
static bool NO_COPY inside_pcon = false;
static int NO_COPY parent_pty;
+static HANDLE NO_COPY parent_pty_input_mutex = NULL;
bool NO_COPY fhandler_console::invisible_console;
@@ -464,6 +465,8 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp)
continue;
}
total_read = 0;
+ if (inside_pcon)
+ WaitForSingleObject (parent_pty_input_mutex, mutex_timeout);
switch (cygwait (p->input_handle, (DWORD) 0))
{
case WAIT_OBJECT_0:
@@ -488,6 +491,8 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp)
default: /* Error */
free (input_rec);
free (input_tmp);
+ if (inside_pcon)
+ ReleaseMutex (parent_pty_input_mutex);
ReleaseMutex (p->input_mutex);
return;
}
@@ -665,6 +670,8 @@ remove_record:
while (true);
}
skip_writeback:
+ if (inside_pcon)
+ ReleaseMutex (parent_pty_input_mutex);
ReleaseMutex (p->input_mutex);
cygwait (40);
}
@@ -1970,6 +1977,8 @@ fhandler_console::setup_pcon_hand_over ()
inside_pcon = true;
atexit (fhandler_console::pcon_hand_over_proc);
parent_pty = i;
+ parent_pty_input_mutex =
+ cygwin_shared->tty[i]->open_input_mutex (MAXIMUM_ALLOWED);
break;
}
}
@@ -1997,6 +2006,7 @@ fhandler_console::pcon_hand_over_proc (void)
}
else
system_printf("Acquiring pcon_ho_mutex failed.");
+ CloseHandle (parent_pty_input_mutex);
/* Do not release the mutex.
Hold onto the mutex until this process completes. */
}
--
2.51.0
More information about the Cygwin-patches
mailing list