Commit d24c5a01 authored by David Gibson's avatar David Gibson

coroutine: Move total initialization outside coroutine

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: default avatarDavid Gibson <david@gibson.dropbear.id.au>
parent ace6131e
...@@ -27,7 +27,6 @@ static void clobber(void *p) ...@@ -27,7 +27,6 @@ static void clobber(void *p)
buf[i] = random() & 0xff; buf[i] = random() & 0xff;
} }
s->total = 0;
for (i = 0; i < sizeof(buf); i++) { for (i = 0; i < sizeof(buf); i++) {
s->total += buf[i]; s->total += buf[i];
} }
...@@ -48,6 +47,7 @@ static void test_metadata(struct coroutine_stack *stack) ...@@ -48,6 +47,7 @@ static void test_metadata(struct coroutine_stack *stack)
if (COROUTINE_AVAILABLE) { if (COROUTINE_AVAILABLE) {
struct coroutine_state t; struct coroutine_state t;
struct state s = { struct state s = {
.total = 0,
}; };
coroutine_init(&t, clobber, &s, stack); coroutine_init(&t, clobber, &s, stack);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment