From 6f34bcda8f5613edbb17c22b97774e0c4317a951 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Mon, 21 Jun 2021 21:21:50 +0000 Subject: Improve logic and cleanup for tests coroutine-7.13 and coroutine-7.14 --- tests/coroutine.test | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/tests/coroutine.test b/tests/coroutine.test index 437d9ad..91ca8a5 100644 --- a/tests/coroutine.test +++ b/tests/coroutine.test @@ -777,10 +777,8 @@ test coroutine-7.13 { coroutine c2 apply [list {} { variable done yield - after 0 [list [info coroutine]] - yieldto try {yieldto c1} - after 0 [list [info coroutine]] - yieldto try {yieldto c1} + yieldto try {yieldto c1} on error {} [list after 0 [list [info coroutine]]] + yieldto try {yieldto c1} on error {} [list after 0 [list [info coroutine]]] set done 1 } [namespace current]] @@ -801,22 +799,29 @@ test coroutine-7.14 { coroutine c0 ::apply [list {} { yield - variable done0 after 0 [list [namespace which c1]] - vwait [namespace current]::done0 + vwait [namespace current]::done1 } [namespace current]] coroutine c1 ::apply [list {} { - variable done0 + variable done1 yield yieldto try "yieldto [list [info coroutine]]" on error {} " ::set [list [namespace current]]::done1 failure ::set [list [namespace current]]::done0 failure " - set done0 success + set done1 success + } [namespace current]] after 1 [list [namespace which c0]] vwait [namespace current]::done0 + if {[namespace which [namespace current]::c1] ne {}} { + # prior to the fix for 5106fddd4400e5b9, the nested yieldto turned into a + # tailcall which was eventutally activated, causing control to return to + # c1. After the fix, that doesn't happen, so if c1 still exists call it + # one final time to allow it to finish and clean up + rename c1 {} + } return [list $done0 $done1] } -result {failure failure} -- cgit v0.12