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:
parent
d4aacd50e6
commit
f2e39d5230
|
@ -1604,6 +1604,8 @@ fhandler_console::dup (fhandler_base *child, int flags)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void hook_conemu_cygwin_connector();
|
||||||
|
|
||||||
int
|
int
|
||||||
fhandler_console::open (int flags, mode_t)
|
fhandler_console::open (int flags, mode_t)
|
||||||
{
|
{
|
||||||
|
@ -1691,6 +1693,8 @@ fhandler_console::open (int flags, mode_t)
|
||||||
|
|
||||||
if (myself->pid == con.owner)
|
if (myself->pid == con.owner)
|
||||||
{
|
{
|
||||||
|
if (GetModuleHandle ("ConEmuHk64.dll"))
|
||||||
|
hook_conemu_cygwin_connector ();
|
||||||
char name[MAX_PATH];
|
char name[MAX_PATH];
|
||||||
shared_name (name, CONS_THREAD_SYNC, get_minor ());
|
shared_name (name, CONS_THREAD_SYNC, get_minor ());
|
||||||
thread_sync_event = CreateEvent(NULL, FALSE, FALSE, name);
|
thread_sync_event = CreateEvent(NULL, FALSE, FALSE, name);
|
||||||
|
@ -3982,6 +3986,7 @@ fhandler_console::set_console_mode_to_native ()
|
||||||
DEF_HOOK (CreateProcessA);
|
DEF_HOOK (CreateProcessA);
|
||||||
DEF_HOOK (CreateProcessW);
|
DEF_HOOK (CreateProcessW);
|
||||||
DEF_HOOK (ContinueDebugEvent);
|
DEF_HOOK (ContinueDebugEvent);
|
||||||
|
DEF_HOOK (LoadLibraryA); /* Hooked for ConEmu cygwin connector */
|
||||||
|
|
||||||
static BOOL WINAPI
|
static BOOL WINAPI
|
||||||
CreateProcessA_Hooked
|
CreateProcessA_Hooked
|
||||||
|
@ -4023,6 +4028,20 @@ ContinueDebugEvent_Hooked
|
||||||
return ContinueDebugEvent_Orig (p, t, s);
|
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
|
void
|
||||||
fhandler_console::fixup_after_fork_exec (bool execing)
|
fhandler_console::fixup_after_fork_exec (bool execing)
|
||||||
{
|
{
|
||||||
|
@ -4046,6 +4065,12 @@ fhandler_console::fixup_after_fork_exec (bool execing)
|
||||||
DO_HOOK (NULL, ContinueDebugEvent);
|
DO_HOOK (NULL, ContinueDebugEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
hook_conemu_cygwin_connector()
|
||||||
|
{
|
||||||
|
DO_HOOK (NULL, LoadLibraryA);
|
||||||
|
}
|
||||||
|
|
||||||
/* Ugly workaround to create invisible console required since Windows 7.
|
/* Ugly workaround to create invisible console required since Windows 7.
|
||||||
|
|
||||||
First try to just attach to any console which may have started this
|
First try to just attach to any console which may have started this
|
||||||
|
|
Loading…
Reference in New Issue