From 686705554686358b75a5247643007bca6f5a880c Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 8 Nov 2013 16:22:50 -0200 Subject: bug: Resuming the running coroutine makes it unyieldable --- ldo.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ldo.c b/ldo.c index d02e1132..7ab9312f 100644 --- a/ldo.c +++ b/ldo.c @@ -1,5 +1,5 @@ /* -** $Id: ldo.c,v 2.108.1.1 2013/04/12 18:48:47 roberto Exp roberto $ +** $Id: ldo.c,v 2.108.1.2 2013/04/19 21:03:23 roberto Exp roberto $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -534,6 +534,7 @@ static void resume (lua_State *L, void *ud) { LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) { int status; + int oldnny = L->nny; /* save 'nny' */ lua_lock(L); luai_userstateresume(L, nargs); L->nCcalls = (from) ? from->nCcalls + 1 : 1; @@ -555,7 +556,7 @@ LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) { } lua_assert(status == L->status); } - L->nny = 1; /* do not allow yields */ + L->nny = oldnny; /* restore 'nny' */ L->nCcalls--; lua_assert(L->nCcalls == ((from) ? from->nCcalls : 0)); lua_unlock(L); -- cgit v1.2.3-55-g6feb