coroutine: Move total initialization outside coroutine
authorDavid Gibson <david@gibson.dropbear.id.au>
Tue, 24 Jan 2017 09:39:45 +0000 (20:39 +1100)
committerDavid Gibson <david@gibson.dropbear.id.au>
Tue, 24 Jan 2017 10:22:27 +0000 (21:22 +1100)
The sample coroutine in api-3 initializes a total to 0, then adds up the
pseudo-random data it has placed into a stack buffer, to ensure that the
compiler won't elide the reading and writing of that buffer.  After the
coroutine has completed, we verify that total is non-zero so that we'll
detect if the coroutine failed to execute entirely.

Except that the initialization of total is within the coroutine itself,
so it could also be non-zero due to it simply being uninitialized.  This
moves the initialization outside the coroutine, to make the test a little
more robust.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
ccan/coroutine/test/api-3.c

index dcc3531250683d49c3ef3d9c52281917e9445598..129126549e3edb6ceefd39bb8d2e281dad80587e 100644 (file)
@@ -27,7 +27,6 @@ static void clobber(void *p)
                buf[i] = random() & 0xff;
        }
 
-       s->total = 0;
        for (i = 0; i < sizeof(buf); i++) {
                s->total += buf[i];
        }
@@ -48,6 +47,7 @@ static void test_metadata(struct coroutine_stack *stack)
        if (COROUTINE_AVAILABLE) {
                struct coroutine_state t;
                struct state s = {
+                       .total = 0,
                };
 
                coroutine_init(&t, clobber, &s, stack);