Commit 1048151c authored by Eli Zaretskii's avatar Eli Zaretskii

Don't install keyboard hook when debugged on MS-Windows

* src/w32fns.c (setup_w32_kbdhook): Don't install the keyboard
hook if we are being debugged.  This avoids hosing the debugger,
because the hook is global, and is called in the context of the
thread which installed it, and that thread is stopped when GDB has
control.  Reported by Fabrice Popineau <fabrice.popineau@gmail.com>.
parent 2f67f8a1
......@@ -276,6 +276,8 @@ static struct
} kbdhook;
typedef HWND (WINAPI *GetConsoleWindow_Proc) (void);
typedef BOOL (WINAPI *IsDebuggerPresent_Proc) (void);
/* stdin, from w32console.c */
extern HANDLE keyboard_handle;
......@@ -2303,6 +2305,19 @@ setup_w32_kbdhook (void)
{
kbdhook.hook_count++;
/* This hook gets in the way of debugging, since when Emacs stops,
its input thread stops, and there's nothing to process keyboard
events, whereas this hook is global, and is invoked in the
context of the thread that installed it. So we don't install the
hook if the process is being debugged. */
if (w32_kbdhook_active)
{
IsDebuggerPresent_Proc is_debugger_present = (IsDebuggerPresent_Proc)
GetProcAddress (GetModuleHandle ("kernel32.dll"), "IsDebuggerPresent");
if (is_debugger_present && is_debugger_present ())
return;
}
/* Hooking is only available on NT architecture systems, as
indicated by the w32_kbdhook_active variable. */
if (kbdhook.hook_count == 1 && w32_kbdhook_active)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment