Use sigset_t and sigfillset instead of memset
authorRuss Allbery <rra@stanford.edu>
Mon, 22 Mar 2010 19:56:09 +0000 (12:56 -0700)
committerDerrick Brashear <shadow@dementia.org>
Mon, 22 Mar 2010 21:47:32 +0000 (14:47 -0700)
Rather than using an arbitrary array memset to ones as our signal
mask, use the POSIX sigfillset function and eliminate the static
variable.  Fixes strict aliasing errors with --enable-checking and
gcc 4.4.3 on Linux x86.

Change-Id: Ic3e0499d03657d94f60808ed12e090dc62cce6fc
Reviewed-on: http://gerrit.openafs.org/1616
Tested-by: Russ Allbery <rra@stanford.edu>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com>
Tested-by: Marc Dionne <marc.c.dionne@gmail.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/lwp/iomgr.c

index 3181e6b..7579813 100644 (file)
@@ -746,8 +746,6 @@ int IOMGR_SoftSig(void *(*aproc)(void *), void *arock)
 }
 
 
-unsigned char allOnes[100];
-
 int IOMGR_Initialize(void)
 {
     PROCESS pid;
@@ -766,7 +764,6 @@ int IOMGR_Initialize(void)
     sigsHandled = 0;
     anySigsDelivered = TRUE; /* A soft signal may have happened before
        IOMGR_Initialize:  so force a check for signals regardless */
-    memset(allOnes, 0xff, sizeof(allOnes));
 
     return LWP_CreateProcess(IOMGR, AFS_LWP_MINSTACKSIZE, 0, (void *) 0, 
                             "IO MANAGER", &IOMGR_Id);
@@ -993,7 +990,7 @@ int IOMGR_Signal (int signo, char *event)
     if (event == NULL)
        return LWP_EBADEVENT;
     sa.sa_handler = SigHandler;
-    sa.sa_mask = *((sigset_t *) allOnes);      /* mask all signals */
+    sigfillset(&sa.sa_mask);   /* mask all signals */
     sa.sa_flags = 0;
     sigsHandled |= mysigmask(signo);
     sigEvents[signo] = event;