diff options
Diffstat (limited to 'misc')
| -rw-r--r-- | misc/examples/cointerleave.c | 14 |
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))); } } |
