This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [PATCH RFA] Linux threads, SIGINT handling
Mark Kettenis wrote:
>
> Date: Fri, 25 May 2001 12:18:37 -0700
> From: Michael Snyder <msnyder@cygnus.com>
>
> Mark,
>
> When a user types ^C(break) at a tty on Linux, SIGINT is sent to every
> thread in the process group (whether by the kernel or by the manager
> thread, I do not know). The effect is that, if you type ^C once, you
> have to say "continue" N times (once for every user thread).
>
> It's the kernel that sends all those SIGINTs, since to the kernel our
> program is just a bunch of processes sharing their VM. And indeed,
> the effect is rather annoying.
>
> This patch handles that problem by discarding the redundant SIGINT
> events (ie. all of them except the one that was actually detected in
> lin_lwp_wait).
>
> I don't think it's OK to unconditionally discard the SIGINT events.
> The process might want to do something special with those, and may
> depend on getting them in every thread. How about changing the
>
> else if (WSTOPSIG (status) == SIGINT)
>
> into
>
> else if (WSTOPSIG (status) == SIGINT
> && signal_pass_state (SIGINT) == 0)
>
> ? Not passing SIGINT to the inferior is GDB's default, so this will
> work fine for most people. And this way people can say
>
> "handle SIGINT pass"
>
> ignore the warning, and have SIGINT delivered to all threads.
>
> If you agree, it's OK to check this in with that change.
Agreed and committed.
Michael