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