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>
This commit is contained in:
parent
4e40b21464
commit
08cd9cfc5c
|
@ -547,8 +547,7 @@ fhandler_pty_master::accept_input ()
|
||||||
{
|
{
|
||||||
/* Slave attaches to a different console than master.
|
/* Slave attaches to a different console than master.
|
||||||
Therefore reattach here. */
|
Therefore reattach here. */
|
||||||
DWORD resume_pid =
|
DWORD resume_pid = attach_console_temporarily (target_pid);
|
||||||
attach_console_temporarily (target_pid, helper_pid);
|
|
||||||
cp_to = GetConsoleCP ();
|
cp_to = GetConsoleCP ();
|
||||||
resume_from_temporarily_attach (resume_pid);
|
resume_from_temporarily_attach (resume_pid);
|
||||||
}
|
}
|
||||||
|
@ -2111,7 +2110,6 @@ fhandler_pty_master::close ()
|
||||||
WaitForSingleObject (helper_h_process, INFINITE);
|
WaitForSingleObject (helper_h_process, INFINITE);
|
||||||
CloseHandle (helper_h_process);
|
CloseHandle (helper_h_process);
|
||||||
CloseHandle (helper_goodbye);
|
CloseHandle (helper_goodbye);
|
||||||
helper_pid = 0;
|
|
||||||
helper_h_process = 0;
|
helper_h_process = 0;
|
||||||
helper_goodbye = NULL;
|
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.
|
/* Slave attaches to a different console than master.
|
||||||
Therefore reattach here. */
|
Therefore reattach here. */
|
||||||
DWORD resume_pid =
|
DWORD resume_pid =
|
||||||
attach_console_temporarily (target_pid, p->helper_pid);
|
attach_console_temporarily (target_pid);
|
||||||
cp_from = GetConsoleOutputCP ();
|
cp_from = GetConsoleOutputCP ();
|
||||||
resume_from_temporarily_attach (resume_pid);
|
resume_from_temporarily_attach (resume_pid);
|
||||||
}
|
}
|
||||||
|
@ -3022,56 +3020,6 @@ fhandler_pty_master::setup ()
|
||||||
}
|
}
|
||||||
WaitForSingleObject (thread_param_copied_event, INFINITE);
|
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");
|
master_fwd_thread = new cygthread (::pty_master_fwd_thread, this, "ptymf");
|
||||||
if (!master_fwd_thread)
|
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->from_slave_nat = from_slave_nat;
|
||||||
p->output_mutex = output_mutex;
|
p->output_mutex = output_mutex;
|
||||||
p->ttyp = get_ttyp ();
|
p->ttyp = get_ttyp ();
|
||||||
p->helper_pid = helper_pid;
|
|
||||||
SetEvent (thread_param_copied_event);
|
SetEvent (thread_param_copied_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4189,7 +4136,7 @@ fhandler_pty_slave::setpgid_aux (pid_t pid)
|
||||||
0, TRUE, DUPLICATE_SAME_ACCESS);
|
0, TRUE, DUPLICATE_SAME_ACCESS);
|
||||||
CloseHandle (pcon_owner);
|
CloseHandle (pcon_owner);
|
||||||
DWORD target_pid = get_ttyp ()->nat_pipe_owner_pid;
|
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;
|
attach_restore = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -4235,15 +4182,12 @@ fhandler_pty_slave::release_ownership_of_nat_pipe (tty *ttyp,
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
fhandler_pty_common::attach_console_temporarily (DWORD target_pid,
|
fhandler_pty_common::attach_console_temporarily (DWORD target_pid)
|
||||||
DWORD helper_pid)
|
|
||||||
{
|
{
|
||||||
DWORD resume_pid = 0;
|
DWORD resume_pid = 0;
|
||||||
acquire_attach_mutex (mutex_timeout);
|
acquire_attach_mutex (mutex_timeout);
|
||||||
pinfo pinfo_resume (myself->ppid);
|
pinfo pinfo_resume (myself->ppid);
|
||||||
if (helper_pid)
|
if (pinfo_resume)
|
||||||
resume_pid = helper_pid;
|
|
||||||
else if (pinfo_resume)
|
|
||||||
resume_pid = pinfo_resume->dwProcessId;
|
resume_pid = pinfo_resume->dwProcessId;
|
||||||
if (!resume_pid)
|
if (!resume_pid)
|
||||||
resume_pid = get_console_process_id (myself->dwProcessId, false);
|
resume_pid = get_console_process_id (myself->dwProcessId, false);
|
||||||
|
|
|
@ -359,8 +359,7 @@ fhandler_termios::process_sigs (char c, tty* ttyp, fhandler_termios *fh)
|
||||||
DWORD resume_pid = 0;
|
DWORD resume_pid = 0;
|
||||||
if (fh && !fh->is_console ())
|
if (fh && !fh->is_console ())
|
||||||
resume_pid =
|
resume_pid =
|
||||||
fhandler_pty_common::attach_console_temporarily
|
fhandler_pty_common::attach_console_temporarily (p->dwProcessId);
|
||||||
(p->dwProcessId, fh->get_helper_pid ());
|
|
||||||
if (fh && p == myself && being_debugged ())
|
if (fh && p == myself && being_debugged ())
|
||||||
{ /* Avoid deadlock in gdb on console. */
|
{ /* Avoid deadlock in gdb on console. */
|
||||||
fh->tcflush(TCIFLUSH);
|
fh->tcflush(TCIFLUSH);
|
||||||
|
|
|
@ -1987,7 +1987,6 @@ class fhandler_termios: public fhandler_base
|
||||||
virtual void setpgid_aux (pid_t pid) {}
|
virtual void setpgid_aux (pid_t pid) {}
|
||||||
virtual bool need_console_handler () { return false; }
|
virtual bool need_console_handler () { return false; }
|
||||||
virtual bool need_send_ctrl_c_event () { return true; }
|
virtual bool need_send_ctrl_c_event () { return true; }
|
||||||
virtual DWORD get_helper_pid () { return 0; }
|
|
||||||
|
|
||||||
struct ptys_handle_set_t
|
struct ptys_handle_set_t
|
||||||
{
|
{
|
||||||
|
@ -2378,7 +2377,7 @@ class fhandler_pty_common: public fhandler_termios
|
||||||
bool cygwin = false,
|
bool cygwin = false,
|
||||||
bool stub_only = false);
|
bool stub_only = false);
|
||||||
bool to_be_read_from_nat_pipe (void);
|
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);
|
static void resume_from_temporarily_attach (DWORD resume_pid);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -2501,7 +2500,6 @@ public:
|
||||||
HANDLE from_slave_nat;
|
HANDLE from_slave_nat;
|
||||||
HANDLE output_mutex;
|
HANDLE output_mutex;
|
||||||
tty *ttyp;
|
tty *ttyp;
|
||||||
DWORD helper_pid;
|
|
||||||
};
|
};
|
||||||
private:
|
private:
|
||||||
int pktmode; // non-zero if pty in a packet mode.
|
int pktmode; // non-zero if pty in a packet mode.
|
||||||
|
@ -2515,7 +2513,6 @@ private:
|
||||||
HANDLE thread_param_copied_event;
|
HANDLE thread_param_copied_event;
|
||||||
HANDLE helper_goodbye;
|
HANDLE helper_goodbye;
|
||||||
HANDLE helper_h_process;
|
HANDLE helper_h_process;
|
||||||
DWORD helper_pid;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HANDLE get_echo_handle () const { return echo_r; }
|
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 get_master_fwd_thread_param (master_fwd_thread_param_t *p);
|
||||||
void set_mask_flusho (bool m) { get_ttyp ()->mask_flusho = m; }
|
void set_mask_flusho (bool m) { get_ttyp ()->mask_flusho = m; }
|
||||||
bool need_send_ctrl_c_event ();
|
bool need_send_ctrl_c_event ();
|
||||||
DWORD get_helper_pid () { return helper_pid; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class fhandler_dev_null: public fhandler_base
|
class fhandler_dev_null: public fhandler_base
|
||||||
|
|
|
@ -33,7 +33,6 @@ struct wincaps
|
||||||
unsigned has_linux_tcp_keepalive_sockopts : 1;
|
unsigned has_linux_tcp_keepalive_sockopts : 1;
|
||||||
unsigned has_tcp_maxrtms : 1;
|
unsigned has_tcp_maxrtms : 1;
|
||||||
unsigned has_con_broken_tabs : 1;
|
unsigned has_con_broken_tabs : 1;
|
||||||
unsigned has_broken_attach_console : 1;
|
|
||||||
unsigned cons_need_small_input_record_buf : 1;
|
unsigned cons_need_small_input_record_buf : 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -87,7 +86,6 @@ public:
|
||||||
bool IMPLEMENT (has_linux_tcp_keepalive_sockopts)
|
bool IMPLEMENT (has_linux_tcp_keepalive_sockopts)
|
||||||
bool IMPLEMENT (has_tcp_maxrtms)
|
bool IMPLEMENT (has_tcp_maxrtms)
|
||||||
bool IMPLEMENT (has_con_broken_tabs)
|
bool IMPLEMENT (has_con_broken_tabs)
|
||||||
bool IMPLEMENT (has_broken_attach_console)
|
|
||||||
bool IMPLEMENT (cons_need_small_input_record_buf)
|
bool IMPLEMENT (cons_need_small_input_record_buf)
|
||||||
|
|
||||||
void disable_case_sensitive_dirs ()
|
void disable_case_sensitive_dirs ()
|
||||||
|
|
|
@ -40,7 +40,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_linux_tcp_keepalive_sockopts:false,
|
has_linux_tcp_keepalive_sockopts:false,
|
||||||
has_tcp_maxrtms:false,
|
has_tcp_maxrtms:false,
|
||||||
has_con_broken_tabs:false,
|
has_con_broken_tabs:false,
|
||||||
has_broken_attach_console:true,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:false,
|
||||||
has_tcp_maxrtms:false,
|
has_tcp_maxrtms:false,
|
||||||
has_con_broken_tabs:false,
|
has_con_broken_tabs:false,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:false,
|
||||||
has_tcp_maxrtms:false,
|
has_tcp_maxrtms:false,
|
||||||
has_con_broken_tabs:false,
|
has_con_broken_tabs:false,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:false,
|
||||||
has_tcp_maxrtms:false,
|
has_tcp_maxrtms:false,
|
||||||
has_con_broken_tabs:false,
|
has_con_broken_tabs:false,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:false,
|
||||||
has_tcp_maxrtms:true,
|
has_tcp_maxrtms:true,
|
||||||
has_con_broken_tabs:false,
|
has_con_broken_tabs:false,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:false,
|
||||||
has_tcp_maxrtms:true,
|
has_tcp_maxrtms:true,
|
||||||
has_con_broken_tabs:true,
|
has_con_broken_tabs:true,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:true,
|
||||||
has_tcp_maxrtms:true,
|
has_tcp_maxrtms:true,
|
||||||
has_con_broken_tabs:true,
|
has_con_broken_tabs:true,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:true,
|
||||||
has_tcp_maxrtms:true,
|
has_tcp_maxrtms:true,
|
||||||
has_con_broken_tabs:true,
|
has_con_broken_tabs:true,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:true,
|
||||||
has_tcp_maxrtms:true,
|
has_tcp_maxrtms:true,
|
||||||
has_con_broken_tabs:true,
|
has_con_broken_tabs:true,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:true,
|
||||||
has_tcp_maxrtms:true,
|
has_tcp_maxrtms:true,
|
||||||
has_con_broken_tabs:true,
|
has_con_broken_tabs:true,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:true,
|
||||||
has_tcp_maxrtms:true,
|
has_tcp_maxrtms:true,
|
||||||
has_con_broken_tabs:true,
|
has_con_broken_tabs:true,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf: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_linux_tcp_keepalive_sockopts:true,
|
||||||
has_tcp_maxrtms:true,
|
has_tcp_maxrtms:true,
|
||||||
has_con_broken_tabs:false,
|
has_con_broken_tabs:false,
|
||||||
has_broken_attach_console:false,
|
|
||||||
cons_need_small_input_record_buf:false,
|
cons_need_small_input_record_buf:false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue