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

Reply via email to