diff options
-rw-r--r-- | ldo.c | 2 | ||||
-rw-r--r-- | testes/cstack.lua | 16 |
2 files changed, 17 insertions, 1 deletions
@@ -674,7 +674,7 @@ LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs, | |||
674 | if (from == NULL) | 674 | if (from == NULL) |
675 | L->nCcalls = CSTACKTHREAD; | 675 | L->nCcalls = CSTACKTHREAD; |
676 | else /* correct 'nCcalls' for this thread */ | 676 | else /* correct 'nCcalls' for this thread */ |
677 | L->nCcalls = getCcalls(from) + from->nci - L->nci - CSTACKCF; | 677 | L->nCcalls = getCcalls(from) - L->nci - CSTACKCF; |
678 | if (L->nCcalls <= CSTACKERR) | 678 | if (L->nCcalls <= CSTACKERR) |
679 | return resume_error(L, "C stack overflow", nargs); | 679 | return resume_error(L, "C stack overflow", nargs); |
680 | luai_userstateresume(L, nargs); | 680 | luai_userstateresume(L, nargs); |
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 | ||