public inbox for cygwin-patches@cygwin.com
 help / color / mirror / Atom feed
* [PATCH] Cygwin: pty: Update some comments in pty code.
@ 2022-03-04 13:32 Takashi Yano
  2022-03-04 13:32 ` [PATCH] Cygwin: pty: Fix a possible race issue in initialization of pcon Takashi Yano
  0 siblings, 1 reply; 2+ messages in thread
From: Takashi Yano @ 2022-03-04 13:32 UTC (permalink / raw)
  To: cygwin-patches

---
 winsup/cygwin/fhandler_tty.cc | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index a0a5a70ba..cba25ee84 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -525,8 +525,11 @@ fhandler_pty_master::accept_input ()
   if (to_be_read_from_nat_pipe ()
       && get_ttyp ()->pty_input_state == tty::to_nat)
     {
-      write_to = to_slave_nat;
+      /* This code is reached if non-cygwin app is foreground and
+	 pseudo console is not enabled. */
+      write_to = to_slave_nat; /* write to nat pipe rather than cyg pipe. */
 
+      /* Charset conversion for non-cygwin apps. */
       UINT cp_to;
       pinfo pinfo_target = pinfo (get_ttyp ()->invisible_console_pid);
       DWORD target_pid = 0;
@@ -607,7 +610,8 @@ fhandler_pty_master::accept_input ()
     }
 
   if (write_to == get_output_handle ())
-    SetEvent (input_available_event);
+    SetEvent (input_available_event); /* Set input_available_event only when
+					 the data is written to cyg pipe. */
   ReleaseMutex (input_mutex);
   return ret;
 }
@@ -1113,7 +1117,7 @@ nat_pipe_owner_self (DWORD pid)
   return (pid == (myself->exec_dwProcessId ?: myself->dwProcessId));
 }
 
-/* This function is called from many pty slave functions. The purpose
+/* This function is called from some pty slave functions. The purpose
    of this function is cleaning up the nat pipe state which is marked
    as active but actually not used anymore. This is needed only when
    non-cygwin process is not terminated cleanly. */
@@ -1207,7 +1211,7 @@ fhandler_pty_slave::reset_switch_to_nat_pipe (void)
     }
   if (isHybrid)
     return;
-  if (get_ttyp ()->pcon_start) /* Pseudo console is initialization on going */
+  if (get_ttyp ()->pcon_start) /* Pseudo console initialization is on going */
     return;
   DWORD wait_ret = WaitForSingleObject (pipe_sw_mutex, mutex_timeout);
   if (wait_ret == WAIT_TIMEOUT)
@@ -2161,7 +2165,7 @@ fhandler_pty_master::write (const void *ptr, size_t len)
   push_process_state process_state (PID_TTYOU);
 
   if (get_ttyp ()->pcon_start)
-    {
+    { /* Reaches here when pseudo console initialization is on going. */
       /* Pseudo condole support uses "CSI6n" to get cursor position.
 	 If the reply for "CSI6n" is divided into multiple writes,
 	 pseudo console sometimes does not recognize it.  Therefore,
@@ -2201,6 +2205,9 @@ fhandler_pty_master::write (const void *ptr, size_t len)
 	}
       if (state == 2)
 	{
+	  /* req_xfer_input is true if "ESC[6n" was sent just for
+	     triggering transfer_input() in master. In this case,
+	     the responce sequence should not be written. */
 	  if (!get_ttyp ()->req_xfer_input)
 	    WriteFile (to_slave_nat, wpbuf, ixput, &n, NULL);
 	  ixput = 0;
@@ -2211,7 +2218,7 @@ fhandler_pty_master::write (const void *ptr, size_t len)
       ReleaseMutex (input_mutex);
 
       if (!get_ttyp ()->pcon_start)
-	{
+	{ /* Pseudo console initialization has been done in above code. */
 	  pinfo pp (get_ttyp ()->pcon_start_pid);
 	  bool pcon_fg = (pp && get_ttyp ()->getpgid () == pp->pgid);
 	  /* GDB may set WINPID rather than cygwin PID to process group
@@ -2243,7 +2250,8 @@ fhandler_pty_master::write (const void *ptr, size_t len)
   WaitForSingleObject (input_mutex, mutex_timeout);
   if (to_be_read_from_nat_pipe () && get_ttyp ()->pcon_activated
       && get_ttyp ()->pty_input_state == tty::to_nat)
-    {
+    { /* Reaches here when non-cygwin app is foreground and pseudo console
+	 is activated. */
       tmp_pathbuf tp;
       char *buf = (char *) ptr;
       size_t nlen = len;
@@ -2277,6 +2285,10 @@ fhandler_pty_master::write (const void *ptr, size_t len)
       return len;
     }
 
+  /* The code path reaches here when pseudo console is not activated
+     or cygwin process is foreground even though pseudo console is
+     activated. */
+
   /* This input transfer is needed when cygwin-app which is started from
      non-cygwin app is terminated if pseudo console is disabled. */
   if (to_be_read_from_nat_pipe () && !get_ttyp ()->pcon_activated
@@ -3197,7 +3209,8 @@ fhandler_pty_slave::setup_pseudoconsole ()
 	{ /* Send CSI6n just for requesting transfer input. */
 	  DWORD n;
 	  WaitForSingleObject (input_mutex, mutex_timeout);
-	  get_ttyp ()->req_xfer_input = true;
+	  get_ttyp ()->req_xfer_input = true; /* indicates that this "ESC[6n"
+						 is just for transfer input */
 	  get_ttyp ()->pcon_start = true;
 	  get_ttyp ()->pcon_start_pid = myself->pid;
 	  WriteFile (get_output_handle (), "\033[6n", 4, &n, NULL);
-- 
2.35.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-03-04 13:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-04 13:32 [PATCH] Cygwin: pty: Update some comments in pty code Takashi Yano
2022-03-04 13:32 ` [PATCH] Cygwin: pty: Fix a possible race issue in initialization of pcon Takashi Yano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).