This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: cygwin apps in pipe ignore ctrl+c FIX


On Sat, Apr 28, 2001 at 01:32:54PM -0700, Tim Baker wrote:
>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:

Thank you for looking into this, but just as a hint, when debugging
this type of thing, it is usually better to figure out if the code
to not account for whether the value was zero or if it is, in fact,
a bug that the value can be zero.

I don't know if pgid is supposed to be nonzero in this case, but
I suspect that it is.

cgf

>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.

--
Want to unsubscribe from this list?
Check out: http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]