Re: [PATCH 1/5] progress.c: replace signal() with sigaction()
From: Jeremiah Mahler <hidden>
Date: 2016-06-15 23:01:24
On Wed, May 28, 2014 at 08:07:38PM +1200, Chris Packham wrote:
On 28/05/14 18:14, Jeremiah Mahler wrote:quoted
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. ...
quoted
@@ -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