mirror of
https://github.com/golang/go
synced 2024-11-12 09:30:25 -07:00
runtime: fix sigaction struct on freebsd
Fix the sa_mask member of the sigaction struct - on FreeBSD this is declared as a sigset_t, which is an array of four unsigned ints. Replace the current int64 with Sigset from defs_freebsd_GOARCH, which has the correct definition. Unbreaks the FreeBSD builds. R=golang-dev, dave, minux.ma CC=golang-dev https://golang.org/cl/7333047
This commit is contained in:
parent
23093f86ee
commit
556dd0bfbd
@ -15,7 +15,7 @@ typedef struct sigaction {
|
||||
void (*__sa_sigaction)(int32, Siginfo*, void *);
|
||||
} __sigaction_u; /* signal handler */
|
||||
int32 sa_flags; /* see signal options below */
|
||||
int64 sa_mask; /* signal mask to apply */
|
||||
Sigset sa_mask; /* signal mask to apply */
|
||||
} Sigaction;
|
||||
|
||||
void
|
||||
@ -141,7 +141,10 @@ runtime·setsig(int32 i, void (*fn)(int32, Siginfo*, void*, G*), bool restart)
|
||||
sa.sa_flags = SA_SIGINFO|SA_ONSTACK;
|
||||
if(restart)
|
||||
sa.sa_flags |= SA_RESTART;
|
||||
sa.sa_mask = ~0ULL;
|
||||
sa.sa_mask.__bits[0] = ~(uint32)0;
|
||||
sa.sa_mask.__bits[1] = ~(uint32)0;
|
||||
sa.sa_mask.__bits[2] = ~(uint32)0;
|
||||
sa.sa_mask.__bits[3] = ~(uint32)0;
|
||||
if (fn == runtime·sighandler)
|
||||
fn = (void*)runtime·sigtramp;
|
||||
sa.__sigaction_u.__sa_sigaction = (void*)fn;
|
||||
|
@ -15,7 +15,7 @@ typedef struct sigaction {
|
||||
void (*__sa_sigaction)(int32, Siginfo*, void *);
|
||||
} __sigaction_u; /* signal handler */
|
||||
int32 sa_flags; /* see signal options below */
|
||||
int64 sa_mask; /* signal mask to apply */
|
||||
Sigset sa_mask; /* signal mask to apply */
|
||||
} Sigaction;
|
||||
|
||||
void
|
||||
@ -149,7 +149,10 @@ runtime·setsig(int32 i, void (*fn)(int32, Siginfo*, void*, G*), bool restart)
|
||||
sa.sa_flags = SA_SIGINFO|SA_ONSTACK;
|
||||
if(restart)
|
||||
sa.sa_flags |= SA_RESTART;
|
||||
sa.sa_mask = ~0ULL;
|
||||
sa.sa_mask.__bits[0] = ~(uint32)0;
|
||||
sa.sa_mask.__bits[1] = ~(uint32)0;
|
||||
sa.sa_mask.__bits[2] = ~(uint32)0;
|
||||
sa.sa_mask.__bits[3] = ~(uint32)0;
|
||||
if (fn == runtime·sighandler)
|
||||
fn = (void*)runtime·sigtramp;
|
||||
sa.__sigaction_u.__sa_sigaction = (void*)fn;
|
||||
|
@ -55,7 +55,7 @@ typedef struct sigaction {
|
||||
void (*__sa_sigaction)(int32, Siginfo*, void *);
|
||||
} __sigaction_u; /* signal handler */
|
||||
int32 sa_flags; /* see signal options below */
|
||||
int64 sa_mask; /* signal mask to apply */
|
||||
Sigset sa_mask; /* signal mask to apply */
|
||||
} Sigaction;
|
||||
|
||||
void
|
||||
@ -164,7 +164,10 @@ runtime·setsig(int32 i, void (*fn)(int32, Siginfo*, void*, G*), bool restart)
|
||||
sa.sa_flags = SA_SIGINFO|SA_ONSTACK;
|
||||
if(restart)
|
||||
sa.sa_flags |= SA_RESTART;
|
||||
sa.sa_mask = ~0ULL;
|
||||
sa.sa_mask.__bits[0] = ~(uint32)0;
|
||||
sa.sa_mask.__bits[1] = ~(uint32)0;
|
||||
sa.sa_mask.__bits[2] = ~(uint32)0;
|
||||
sa.sa_mask.__bits[3] = ~(uint32)0;
|
||||
if (fn == runtime·sighandler)
|
||||
fn = (void*)runtime·sigtramp;
|
||||
sa.__sigaction_u.__sa_sigaction = (void*)fn;
|
||||
|
Loading…
Reference in New Issue
Block a user