diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-07-13 13:39:02 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-07-13 13:39:02 -0300 |
| commit | e1d8770f12542d34a3e32b825c95b93f8a341ee1 (patch) | |
| tree | 15296aaedd195efd19192052af2192fcd7c12f54 /testes | |
| parent | 0f1cd0eba99ea6d383e75b9ae488d00ad541c210 (diff) | |
| download | lua-e1d8770f12542d34a3e32b825c95b93f8a341ee1.tar.gz lua-e1d8770f12542d34a3e32b825c95b93f8a341ee1.tar.bz2 lua-e1d8770f12542d34a3e32b825c95b93f8a341ee1.zip | |
Fixed bug: wrong stack limit when entering a coroutine
When entering a coroutine, the computation of nCcalls added 'from->nci'
to correct for preallocated CallInfos, but 'nci' includes also the
Callinfos already used.
Diffstat (limited to 'testes')
| -rw-r--r-- | testes/cstack.lua | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/testes/cstack.lua b/testes/cstack.lua index e3e14f74..4e37b988 100644 --- a/testes/cstack.lua +++ b/testes/cstack.lua | |||
| @@ -105,6 +105,22 @@ do print("testing stack-overflow in recursive 'gsub'") | |||
| 105 | print("\tfinal count: ", count) | 105 | print("\tfinal count: ", count) |
| 106 | end | 106 | end |
| 107 | 107 | ||
| 108 | do -- bug in 5.4.0 | ||
| 109 | print("testing limits in coroutines inside deep calls") | ||
| 110 | count = 0 | ||
| 111 | local lim = 1000 | ||
| 112 | local function stack (n) | ||
| 113 | progress() | ||
| 114 | if n > 0 then return stack(n - 1) + 1 | ||
| 115 | else coroutine.wrap(function () | ||
| 116 | stack(lim) | ||
| 117 | end)() | ||
| 118 | end | ||
| 119 | end | ||
| 120 | |||
| 121 | print(xpcall(stack, function () return "ok" end, lim)) | ||
| 122 | end | ||
| 123 | |||
| 108 | 124 | ||
| 109 | do print("testing changes in C-stack limit") | 125 | do print("testing changes in C-stack limit") |
| 110 | 126 | ||
