X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Faltstack%2Faltstack.c;fp=ccan%2Faltstack%2Faltstack.c;h=62db343cb2c9523a2d4ba11002c27d83c87ac43e;hp=edd79f6813d0b2e09e4e7391a1f25f39153b6d1c;hb=15c555b335126e5210c2847048f85dd078e71cf7;hpb=2da0271f9700ecb1bd402918e5f7ae7b27c2b142 diff --git a/ccan/altstack/altstack.c b/ccan/altstack/altstack.c index edd79f68..62db343c 100644 --- a/ccan/altstack/altstack.c +++ b/ccan/altstack/altstack.c @@ -71,6 +71,7 @@ int altstack(rlim_t max, void *(*fn)(void *), void *arg, void **out) struct rlimit rl_save; struct sigaction sa_save; int errno_save; + stack_t ss_save; assert(max > 0 && fn); #define ok(x, y) ({ long __r = (long) (x); if (__r == -1) { bang(#x); if (y) goto out; } __r; }) @@ -98,7 +99,7 @@ int altstack(rlim_t max, void *(*fn)(void *), void *arg, void **out) stack_t ss = { .ss_sp = sigstk, .ss_size = sizeof(sigstk) }; struct sigaction sa = { .sa_handler = segvjmp, .sa_flags = SA_NODEFER|SA_RESETHAND|SA_ONSTACK }; - ok(sigaltstack(&ss, 0), 1); + ok(sigaltstack(&ss, &ss_save), 1); undo++; sigemptyset(&sa.sa_mask); @@ -131,7 +132,7 @@ out: case 4: ok(sigaction(SIGSEGV, &sa_save, 0), 0); case 3: - ok(sigaltstack(&(stack_t) { .ss_flags = SS_DISABLE }, 0), 0); + ok(sigaltstack(&ss_save, 0), 0); case 2: ok(munmap(m, max), 0); case 1: