]> git.ozlabs.org Git - ccan/blobdiff - ccan/altstack/altstack.c
coroutine: Remove on-stack buffers from testcases
[ccan] / ccan / altstack / altstack.c
index edd79f6813d0b2e09e4e7391a1f25f39153b6d1c..afee46e8a619c3d77c963f58feda7560e9debeb1 100644 (file)
@@ -71,16 +71,17 @@ 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; })
 
        state.fn  = fn;
        state.arg = arg;
-       state.out = 0;
+       state.out = NULL;
        state.max = max;
        state.ebuf[state.elen = 0] = '\0';
-       if (out) *out = 0;
+       if (out) *out = NULL;
 
        // if the first page below the mapping is in use, we get max-pgsz usable bytes
        // add pgsz to max to guarantee at least max usable bytes
@@ -90,7 +91,7 @@ int altstack(rlim_t max, void *(*fn)(void *), void *arg, void **out)
        ok(setrlimit(RLIMIT_STACK, &(struct rlimit) { state.max, rl_save.rlim_max }), 1);
        undo++;
 
-       ok(m = mmap(0, max, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN|MAP_NORESERVE, -1, 0), 1);
+       ok(m = mmap(NULL, max, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN|MAP_NORESERVE, -1, 0), 1);
        undo++;
 
        if (setjmp(state.jmp) == 0) {
@@ -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);
@@ -129,9 +130,9 @@ out:
 
        switch (undo) {
        case 4:
-               ok(sigaction(SIGSEGV, &sa_save, 0), 0);
+               ok(sigaction(SIGSEGV, &sa_save, NULL), 0);
        case 3:
-               ok(sigaltstack(&(stack_t) { .ss_flags = SS_DISABLE }, 0), 0);
+               ok(sigaltstack(&ss_save, NULL), 0);
        case 2:
                ok(munmap(m, max), 0);
        case 1: