From 66429475ed6ac0deaba85989174e8880762d7888 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Fri, 17 Mar 2023 14:53:05 +0100 Subject: Reuse of coroutine context requires cco_reset of state. --- include/stc/algo/coroutine.h | 2 +- misc/examples/coroutines.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/stc/algo/coroutine.h b/include/stc/algo/coroutine.h index 3592b968..d29b2cef 100644 --- a/include/stc/algo/coroutine.h +++ b/include/stc/algo/coroutine.h @@ -68,7 +68,7 @@ enum { #define cco_begin(ctx) \ int *_state = &(ctx)->cco_state; \ switch (*_state) { \ - case 0: case cco_state_done: + case 0: #define cco_end(retval) \ *_state = cco_state_done; break; \ diff --git a/misc/examples/coroutines.c b/misc/examples/coroutines.c index 2c9e6d5c..b11b8532 100644 --- a/misc/examples/coroutines.c +++ b/misc/examples/coroutines.c @@ -85,6 +85,7 @@ bool combined(struct combined* C) { // Reuse the C->prm context and extend the count: C->prm.count = 8; C->prm.result += 2; + cco_reset(&C->prm); cco_yield(prime(&C->prm), &C->prm, true); cco_final: puts("final comb"); -- cgit v1.2.3