[CMD] Don't pass CTRL-C to child processes.

CORE-11677

The standard Win32 Console Control Handler will give CTRL-C events to
processes spawned from cmd.exe. If cmd.exe calls GenerateConsolCtrlEvent()
then the child process will receive two CTRL-C events.
This commit is contained in:
James Woodcock 2018-04-27 16:12:23 +01:00 committed by Hermès Bélusca-Maïto
parent 94ead99e0c
commit 23de2099e0
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0

View file

@ -429,7 +429,7 @@ Execute(LPTSTR Full, LPTSTR First, LPTSTR Rest, PARSED_COMMAND *Cmd)
NULL,
NULL,
TRUE,
0, /* CREATE_NEW_PROCESS_GROUP */
0,
NULL,
NULL,
&stui,
@ -1459,26 +1459,16 @@ BOOL WINAPI BreakHandler(DWORD dwCtrlType)
{
DWORD dwWritten;
INPUT_RECORD rec;
static BOOL SelfGenerated = FALSE;
if ((dwCtrlType != CTRL_C_EVENT) &&
(dwCtrlType != CTRL_BREAK_EVENT))
{
return FALSE;
}
else
{
if (SelfGenerated)
{
SelfGenerated = FALSE;
return TRUE;
}
}
if (!TryEnterCriticalSection(&ChildProcessRunningLock))
{
SelfGenerated = TRUE;
GenerateConsoleCtrlEvent (dwCtrlType, 0);
/* Child process is running and will have received the control event */
return TRUE;
}
else