4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-02-21 00:07:36 +08:00

Cygwin: console: Add workaround for ConEmu cygwin connector.

- ConEmu cygwin connector conflicts with cons_master_thread since
  it does not use read() to read console input. With this patch,
  cons_master_thread is disabled in ConEmu cygwin connector.
This commit is contained in:
Takashi Yano 2022-07-28 21:58:04 +09:00
parent d4aacd50e6
commit f2e39d5230

View File

@ -1604,6 +1604,8 @@ fhandler_console::dup (fhandler_base *child, int flags)
return 0;
}
static void hook_conemu_cygwin_connector();
int
fhandler_console::open (int flags, mode_t)
{
@ -1691,6 +1693,8 @@ fhandler_console::open (int flags, mode_t)
if (myself->pid == con.owner)
{
if (GetModuleHandle ("ConEmuHk64.dll"))
hook_conemu_cygwin_connector ();
char name[MAX_PATH];
shared_name (name, CONS_THREAD_SYNC, get_minor ());
thread_sync_event = CreateEvent(NULL, FALSE, FALSE, name);
@ -3982,6 +3986,7 @@ fhandler_console::set_console_mode_to_native ()
DEF_HOOK (CreateProcessA);
DEF_HOOK (CreateProcessW);
DEF_HOOK (ContinueDebugEvent);
DEF_HOOK (LoadLibraryA); /* Hooked for ConEmu cygwin connector */
static BOOL WINAPI
CreateProcessA_Hooked
@ -4023,6 +4028,20 @@ ContinueDebugEvent_Hooked
return ContinueDebugEvent_Orig (p, t, s);
}
/* Hooked for ConEmu cygwin connector */
static HMODULE WINAPI
LoadLibraryA_Hooked (LPCSTR m)
{
const char *p;
if ((p = strrchr(m, '\\')))
p++;
else
p = m;
if (strcasecmp(p, "ConEmuHk64.dll") == 0)
fhandler_console::set_disable_master_thread (true);
return LoadLibraryA_Orig (m);
}
void
fhandler_console::fixup_after_fork_exec (bool execing)
{
@ -4046,6 +4065,12 @@ fhandler_console::fixup_after_fork_exec (bool execing)
DO_HOOK (NULL, ContinueDebugEvent);
}
static void
hook_conemu_cygwin_connector()
{
DO_HOOK (NULL, LoadLibraryA);
}
/* Ugly workaround to create invisible console required since Windows 7.
First try to just attach to any console which may have started this