diff --git a/src/context.c b/src/context.c index bf0d435b52164d769429bc52f7cc980fd1b9469a..298e91f94905b3981049c45a2bfc9320a2e92fcc 100644 --- a/src/context.c +++ b/src/context.c @@ -42,20 +42,23 @@ int init_ctx(ctx_t *pctx, funct_t f, void *args) void switch_to_ctx(ctx_t *pctx) { - if (pctx->status == CTX_END) + if (pctx->status == CTX_END || pctx->status == CTX_WAIT) { - // Si c'est l'unique ctx - if (pctx == pctx->next_ctx) - ring_ctx = NULL; - else - current_ctx->next_ctx = pctx->next_ctx; - - free_ctx(pctx); + if (pctx->status == CTX_END) + { + // Si c'est l'unique ctx + if (pctx == pctx->next_ctx) + ring_ctx = NULL; + else + current_ctx->next_ctx = pctx->next_ctx; + + free_ctx(pctx); + } yield(); return; } - assert(pctx->status != CTX_END); + assert(pctx->status != CTX_END && pctx->status != CTX_WAIT); if (current_ctx != NULL) { // Sauvegarder où on en est avec le ctx courant