public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
From: Corinna Vinschen <corinna@sourceware.org>
To: cygwin-cvs@sourceware.org
Subject: [newlib-cygwin] Cygwin: drop wincap::has_broken_attach_console
Date: Sun,  4 Dec 2022 13:27:42 +0000 (GMT)	[thread overview]
Message-ID: <20221204132742.76EC0384F483@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=08cd9cfc5c7ee1d0d1c84d1c708a2e6446c7c337

commit 08cd9cfc5c7ee1d0d1c84d1c708a2e6446c7c337
Author:     Corinna Vinschen <corinna@vinschen.de>
AuthorDate: Tue Nov 15 17:39:10 2022 +0100
Commit:     Corinna Vinschen <corinna@vinschen.de>
CommitDate: Sun Dec 4 14:01:41 2022 +0100

    Cygwin: drop wincap::has_broken_attach_console
    
    Only required for Windows 7.
    
    This in turn allows to drop the helper_pid and related
    methods from fhandler_pty_common.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/fhandler/pty.cc           | 66 +++------------------------------
 winsup/cygwin/fhandler/termios.cc       |  3 +-
 winsup/cygwin/local_includes/fhandler.h |  6 +--
 winsup/cygwin/local_includes/wincap.h   |  2 -
 winsup/cygwin/wincap.cc                 | 12 ------
 5 files changed, 7 insertions(+), 82 deletions(-)

diff --git a/winsup/cygwin/fhandler/pty.cc b/winsup/cygwin/fhandler/pty.cc
index 7959d4b0ac40..e7106daba48b 100644
--- a/winsup/cygwin/fhandler/pty.cc
+++ b/winsup/cygwin/fhandler/pty.cc
@@ -547,8 +547,7 @@ fhandler_pty_master::accept_input ()
 	{
 	  /* Slave attaches to a different console than master.
 	     Therefore reattach here. */
-	  DWORD resume_pid =
-	    attach_console_temporarily (target_pid, helper_pid);
+	  DWORD resume_pid = attach_console_temporarily (target_pid);
 	  cp_to = GetConsoleCP ();
 	  resume_from_temporarily_attach (resume_pid);
 	}
@@ -2111,7 +2110,6 @@ fhandler_pty_master::close ()
 	      WaitForSingleObject (helper_h_process, INFINITE);
 	      CloseHandle (helper_h_process);
 	      CloseHandle (helper_goodbye);
-	      helper_pid = 0;
 	      helper_h_process = 0;
 	      helper_goodbye = NULL;
 	    }
@@ -2838,7 +2836,7 @@ fhandler_pty_master::pty_master_fwd_thread (const master_fwd_thread_param_t *p)
 	  /* Slave attaches to a different console than master.
 	     Therefore reattach here. */
 	  DWORD resume_pid =
-	    attach_console_temporarily (target_pid, p->helper_pid);
+	    attach_console_temporarily (target_pid);
 	  cp_from = GetConsoleOutputCP ();
 	  resume_from_temporarily_attach (resume_pid);
 	}
@@ -3022,56 +3020,6 @@ fhandler_pty_master::setup ()
     }
   WaitForSingleObject (thread_param_copied_event, INFINITE);
 
-  if (wincap.has_broken_attach_console ()
-      && _major (myself->ctty) == DEV_CONS_MAJOR
-      && !(!pinfo (myself->ppid) && getenv ("ConEmuPID")))
-    {
-      HANDLE hello = CreateEvent (&sec_none, true, false, NULL);
-      HANDLE goodbye = CreateEvent (&sec_none, true, false, NULL);
-      WCHAR cmd[MAX_PATH];
-      path_conv helper ("/bin/cygwin-console-helper.exe");
-      size_t len = helper.get_wide_win32_path_len ();
-      helper.get_wide_win32_path (cmd);
-      __small_swprintf (cmd + len, L" %p %p", hello, goodbye);
-
-      STARTUPINFOEXW si;
-      PROCESS_INFORMATION pi;
-      ZeroMemory (&si, sizeof (si));
-      si.StartupInfo.cb = sizeof (STARTUPINFOEXW);
-
-      SIZE_T bytesRequired;
-      InitializeProcThreadAttributeList (NULL, 1, 0, &bytesRequired);
-      si.lpAttributeList = (PPROC_THREAD_ATTRIBUTE_LIST)
-	HeapAlloc (GetProcessHeap (), 0, bytesRequired);
-      InitializeProcThreadAttributeList (si.lpAttributeList,
-					 1, 0, &bytesRequired);
-      HANDLE handles_to_inherit[] = {hello, goodbye};
-      UpdateProcThreadAttribute (si.lpAttributeList,
-				 0,
-				 PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
-				 handles_to_inherit,
-				 sizeof (handles_to_inherit),
-				 NULL, NULL);
-      if (CreateProcessW (NULL, cmd, &sec_none, &sec_none,
-			  TRUE, EXTENDED_STARTUPINFO_PRESENT,
-			  NULL, NULL, &si.StartupInfo, &pi))
-	{
-	  WaitForSingleObject (hello, INFINITE);
-	  CloseHandle (hello);
-	  CloseHandle (pi.hThread);
-	  helper_goodbye = goodbye;
-	  helper_pid = pi.dwProcessId;
-	  helper_h_process = pi.hProcess;
-	}
-      else
-	{
-	  CloseHandle (hello);
-	  CloseHandle (goodbye);
-	}
-      DeleteProcThreadAttributeList (si.lpAttributeList);
-      HeapFree (GetProcessHeap (), 0, si.lpAttributeList);
-    }
-
   master_fwd_thread = new cygthread (::pty_master_fwd_thread, this, "ptymf");
   if (!master_fwd_thread)
     {
@@ -3877,7 +3825,6 @@ fhandler_pty_master::get_master_fwd_thread_param (master_fwd_thread_param_t *p)
   p->from_slave_nat = from_slave_nat;
   p->output_mutex = output_mutex;
   p->ttyp = get_ttyp ();
-  p->helper_pid = helper_pid;
   SetEvent (thread_param_copied_event);
 }
 
@@ -4189,7 +4136,7 @@ fhandler_pty_slave::setpgid_aux (pid_t pid)
 			   0, TRUE, DUPLICATE_SAME_ACCESS);
 	  CloseHandle (pcon_owner);
 	  DWORD target_pid = get_ttyp ()->nat_pipe_owner_pid;
-	  resume_pid = attach_console_temporarily (target_pid, 0);
+	  resume_pid = attach_console_temporarily (target_pid);
 	  attach_restore = true;
 	}
       else
@@ -4235,15 +4182,12 @@ fhandler_pty_slave::release_ownership_of_nat_pipe (tty *ttyp,
 }
 
 DWORD
-fhandler_pty_common::attach_console_temporarily (DWORD target_pid,
-						 DWORD helper_pid)
+fhandler_pty_common::attach_console_temporarily (DWORD target_pid)
 {
   DWORD resume_pid = 0;
   acquire_attach_mutex (mutex_timeout);
   pinfo pinfo_resume (myself->ppid);
-  if (helper_pid)
-    resume_pid = helper_pid;
-  else if (pinfo_resume)
+  if (pinfo_resume)
     resume_pid = pinfo_resume->dwProcessId;
   if (!resume_pid)
     resume_pid = get_console_process_id (myself->dwProcessId, false);
diff --git a/winsup/cygwin/fhandler/termios.cc b/winsup/cygwin/fhandler/termios.cc
index 517e74e7749e..fe4dfd13ecdd 100644
--- a/winsup/cygwin/fhandler/termios.cc
+++ b/winsup/cygwin/fhandler/termios.cc
@@ -359,8 +359,7 @@ fhandler_termios::process_sigs (char c, tty* ttyp, fhandler_termios *fh)
 	  DWORD resume_pid = 0;
 	  if (fh && !fh->is_console ())
 	    resume_pid =
-	      fhandler_pty_common::attach_console_temporarily
-				    (p->dwProcessId, fh->get_helper_pid ());
+	      fhandler_pty_common::attach_console_temporarily (p->dwProcessId);
 	  if (fh && p == myself && being_debugged ())
 	    { /* Avoid deadlock in gdb on console. */
 	      fh->tcflush(TCIFLUSH);
diff --git a/winsup/cygwin/local_includes/fhandler.h b/winsup/cygwin/local_includes/fhandler.h
index 6671d8a05c60..8c320421b6b6 100644
--- a/winsup/cygwin/local_includes/fhandler.h
+++ b/winsup/cygwin/local_includes/fhandler.h
@@ -1987,7 +1987,6 @@ class fhandler_termios: public fhandler_base
   virtual void setpgid_aux (pid_t pid) {}
   virtual bool need_console_handler () { return false; }
   virtual bool need_send_ctrl_c_event () { return true; }
-  virtual DWORD get_helper_pid () { return 0; }
 
   struct ptys_handle_set_t
   {
@@ -2378,7 +2377,7 @@ class fhandler_pty_common: public fhandler_termios
 				       bool cygwin = false,
 				       bool stub_only = false);
   bool to_be_read_from_nat_pipe (void);
-  static DWORD attach_console_temporarily (DWORD target_pid, DWORD helper_pid);
+  static DWORD attach_console_temporarily (DWORD target_pid);
   static void resume_from_temporarily_attach (DWORD resume_pid);
 
  protected:
@@ -2501,7 +2500,6 @@ public:
     HANDLE from_slave_nat;
     HANDLE output_mutex;
     tty *ttyp;
-    DWORD helper_pid;
   };
 private:
   int pktmode;			// non-zero if pty in a packet mode.
@@ -2515,7 +2513,6 @@ private:
   HANDLE thread_param_copied_event;
   HANDLE helper_goodbye;
   HANDLE helper_h_process;
-  DWORD helper_pid;
 
 public:
   HANDLE get_echo_handle () const { return echo_r; }
@@ -2570,7 +2567,6 @@ public:
   void get_master_fwd_thread_param (master_fwd_thread_param_t *p);
   void set_mask_flusho (bool m) { get_ttyp ()->mask_flusho = m; }
   bool need_send_ctrl_c_event ();
-  DWORD get_helper_pid () { return helper_pid; }
 };
 
 class fhandler_dev_null: public fhandler_base
diff --git a/winsup/cygwin/local_includes/wincap.h b/winsup/cygwin/local_includes/wincap.h
index 17d2d74293d1..c26324fd6dac 100644
--- a/winsup/cygwin/local_includes/wincap.h
+++ b/winsup/cygwin/local_includes/wincap.h
@@ -33,7 +33,6 @@ struct wincaps
     unsigned has_linux_tcp_keepalive_sockopts			: 1;
     unsigned has_tcp_maxrtms					: 1;
     unsigned has_con_broken_tabs				: 1;
-    unsigned has_broken_attach_console				: 1;
     unsigned cons_need_small_input_record_buf			: 1;
   };
 };
@@ -87,7 +86,6 @@ public:
   bool	IMPLEMENT (has_linux_tcp_keepalive_sockopts)
   bool	IMPLEMENT (has_tcp_maxrtms)
   bool	IMPLEMENT (has_con_broken_tabs)
-  bool	IMPLEMENT (has_broken_attach_console)
   bool	IMPLEMENT (cons_need_small_input_record_buf)
 
   void disable_case_sensitive_dirs ()
diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc
index c52d4154010c..fe5986c76e21 100644
--- a/winsup/cygwin/wincap.cc
+++ b/winsup/cygwin/wincap.cc
@@ -40,7 +40,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
     has_linux_tcp_keepalive_sockopts:false,
     has_tcp_maxrtms:false,
     has_con_broken_tabs:false,
-    has_broken_attach_console:true,
     cons_need_small_input_record_buf:true,
   },
 };
@@ -66,7 +65,6 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
     has_linux_tcp_keepalive_sockopts:false,
     has_tcp_maxrtms:false,
     has_con_broken_tabs:false,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -92,7 +90,6 @@ wincaps wincap_8_1 __attribute__((section (".cygwin_dll_common"), shared)) = {
     has_linux_tcp_keepalive_sockopts:false,
     has_tcp_maxrtms:false,
     has_con_broken_tabs:false,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -118,7 +115,6 @@ wincaps  wincap_10_1507 __attribute__((section (".cygwin_dll_common"), shared))
     has_linux_tcp_keepalive_sockopts:false,
     has_tcp_maxrtms:false,
     has_con_broken_tabs:false,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -144,7 +140,6 @@ wincaps  wincap_10_1607 __attribute__((section (".cygwin_dll_common"), shared))
     has_linux_tcp_keepalive_sockopts:false,
     has_tcp_maxrtms:true,
     has_con_broken_tabs:false,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -170,7 +165,6 @@ wincaps wincap_10_1703 __attribute__((section (".cygwin_dll_common"), shared)) =
     has_linux_tcp_keepalive_sockopts:false,
     has_tcp_maxrtms:true,
     has_con_broken_tabs:true,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -196,7 +190,6 @@ wincaps wincap_10_1709 __attribute__((section (".cygwin_dll_common"), shared)) =
     has_linux_tcp_keepalive_sockopts:true,
     has_tcp_maxrtms:true,
     has_con_broken_tabs:true,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -222,7 +215,6 @@ wincaps wincap_10_1803 __attribute__((section (".cygwin_dll_common"), shared)) =
     has_linux_tcp_keepalive_sockopts:true,
     has_tcp_maxrtms:true,
     has_con_broken_tabs:true,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -248,7 +240,6 @@ wincaps wincap_10_1809 __attribute__((section (".cygwin_dll_common"), shared)) =
     has_linux_tcp_keepalive_sockopts:true,
     has_tcp_maxrtms:true,
     has_con_broken_tabs:true,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -274,7 +265,6 @@ wincaps wincap_10_1903 __attribute__((section (".cygwin_dll_common"), shared)) =
     has_linux_tcp_keepalive_sockopts:true,
     has_tcp_maxrtms:true,
     has_con_broken_tabs:true,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -300,7 +290,6 @@ wincaps wincap_10_2004 __attribute__((section (".cygwin_dll_common"), shared)) =
     has_linux_tcp_keepalive_sockopts:true,
     has_tcp_maxrtms:true,
     has_con_broken_tabs:true,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };
@@ -326,7 +315,6 @@ wincaps wincap_11 __attribute__((section (".cygwin_dll_common"), shared)) = {
     has_linux_tcp_keepalive_sockopts:true,
     has_tcp_maxrtms:true,
     has_con_broken_tabs:false,
-    has_broken_attach_console:false,
     cons_need_small_input_record_buf:false,
   },
 };

                 reply	other threads:[~2022-12-04 13:27 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221204132742.76EC0384F483@sourceware.org \
    --to=corinna@sourceware.org \
    --cc=cygwin-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).