Re: [PATCH 1/5] progress.c: replace signal() with sigaction()
- From
Jeremiah Mahler <jmmahler@gmail.com>
- Date
- May 28, 2014, 15:45 UTC
- Message-ID
- <20140528154509.GA7076@hudson.localdomain>
- In-Reply-To
- <5385994A.5040507@gmail.com>
On Wed, May 28, 2014 at 08:07:38PM +1200, Chris Packham wrote:
Show 11 quoted lines
> On 28/05/14 18:14, Jeremiah Mahler wrote: > > From signal(2) > > > > The behavior of signal() varies across UNIX versions, and has also var‐ > > ied historically across different versions of Linux. Avoid its use: > > use sigaction(2) instead. See Portability below. > > Minor nit. The last sentence applies to the man page you're quoting and > doesn't really make sense when viewed in the context of this commit > message. Same applies to other patches in this series. >
Yes, that is confusing.
...
Show 14 quoted lines
> > @@ -66,8 +66,12 @@ static void set_progress_signal(void)
> > static void clear_progress_signal(void)
> > {
> > struct itimerval v = {{0,},};
> > + struct sigaction sa;
> > +
> > + memset(&sa, 0, sizeof(sa));
> > + sa.sa_handler = SIG_IGN;
>
> A C99 initialiser here would save the call to memset. Unfortunately
> Documentation/CodingGuidelines is fairly clear on not using C99
> initialisers, given the fact we're now at git 2.0 maybe it's time to
> revisit this policy?
> struct sigaction sa = { .sa_handler = SIG_IGN };I do like that.
This brings up another issue. memset(&sa, 0, sizeof(sa)); The sigaction examples I have seen always use memset. The manpage for sigaction(2) doesn't mention it. Other code it Git uses memset with sigaction (see fast-import.c line 530).
Is this struct guaranteed to be initialized to zero so I don't have to use memset?
-- Jeremiah Mahler jmmahler@gmail.com http://github.com/jmahler