In a previous message I reported that Cygwin apps running
in a pipe would ignore Ctrl+C from the command-line. So
I got the sources and built cygwin1.dll, and found the problem
in winsup/cygwin/exceptions.cc.
This is the original code (relevant parts only):
static BOOL WINAPI
ctrl_c_handler (DWORD type)
{
tty_min *t = cygwin_shared->tty.get_tty (myself->ctty);
if (t->getpgid () != myself->pid ||
(GetTickCount () - t->last_ctrl_c) < MIN_CTRL_C_SLOP)
return TRUE;
else
{
t->last_ctrl_c = GetTickCount ();
kill (-myself->pid, SIGINT);
t->last_ctrl_c = GetTickCount ();
return TRUE;
}
}
The problem was that t->getpgid() returns *zero*. So I added a
check for zero as follows:
static BOOL WINAPI
ctrl_c_handler (DWORD type)
{
if (t->getpgid () && ((t->getpgid () != myself->pid) ||
((GetTickCount () - t->last_ctrl_c) < MIN_CTRL_C_SLOP)))
return TRUE;
else
{
t->last_ctrl_c = GetTickCount ();
kill (-myself->pid, SIGINT);
t->last_ctrl_c = GetTickCount ();
return TRUE;
}
}
Now Ctrl+C and GenerateConsoleCtrlEvent() work great for apps
in a pipe.
-- Tim Baker
--
Want to unsubscribe from this list?
Check out: http://cygwin.com/ml/#unsubscribe-simple