summaryrefslogtreecommitdiffhomepage
path: root/misc
diff options
context:
space:
mode:
Diffstat (limited to 'misc')
-rw-r--r--misc/examples/cointerleave.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/misc/examples/cointerleave.c b/misc/examples/cointerleave.c
index 42bf1d32..51b9f39a 100644
--- a/misc/examples/cointerleave.c
+++ b/misc/examples/cointerleave.c
@@ -29,11 +29,15 @@ struct Generator {
void interleaved(struct Generator* g)
{
cco_routine(g) {
- while (!(cco_done(&g->x) & cco_done(&g->y)))
- {
- cco_yield_coro(&g->x, g->value = get_value(&g->x));
- cco_yield_coro(&g->y, g->value = get_value(&g->y));
- }
+ do {
+ g->value = get_value(&g->x);
+ if (!cco_done(&g->x))
+ cco_yield();
+
+ g->value = get_value(&g->y);
+ if (!cco_done(&g->y))
+ cco_yield();
+ } while (!(cco_done(&g->x) & cco_done(&g->y)));
}
}