aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2012-10-01 11:05:04 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2012-10-01 11:05:04 -0300
commitb157f3546eddda96b8b4f5cd81f56d4ceed2c418 (patch)
treed1c401fa83dee3c9e5ecf6b7c0eb686dd01398d0
parentab7086e209d49b6ff2593a7c97ddaed664a3960b (diff)
downloadlua-b157f3546eddda96b8b4f5cd81f56d4ceed2c418.tar.gz
lua-b157f3546eddda96b8b4f5cd81f56d4ceed2c418.tar.bz2
lua-b157f3546eddda96b8b4f5cd81f56d4ceed2c418.zip
BUG: 'pcall' may not restore previous error function when
inside coroutines
-rw-r--r--ldo.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ldo.c b/ldo.c
index dd0bf405..bbdffbac 100644
--- a/ldo.c
+++ b/ldo.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldo.c,v 2.106 2012/06/29 19:23:33 roberto Exp roberto $ 2** $Id: ldo.c,v 2.107 2012/08/28 18:30:45 roberto Exp roberto $
3** Stack and Call structure of Lua 3** Stack and Call structure of Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -403,7 +403,11 @@ static void finishCcall (lua_State *L) {
403 int n; 403 int n;
404 lua_assert(ci->u.c.k != NULL); /* must have a continuation */ 404 lua_assert(ci->u.c.k != NULL); /* must have a continuation */
405 lua_assert(L->nny == 0); 405 lua_assert(L->nny == 0);
406 /* finish 'lua_callk' */ 406 if (ci->callstatus & CIST_YPCALL) { /* was inside a pcall? */
407 ci->callstatus &= ~CIST_YPCALL; /* finish 'lua_pcall' */
408 L->errfunc = ci->u.c.old_errfunc;
409 }
410 /* finish 'lua_callk'/'lua_pcall' */
407 adjustresults(L, ci->nresults); 411 adjustresults(L, ci->nresults);
408 /* call continuation function */ 412 /* call continuation function */
409 if (!(ci->callstatus & CIST_STAT)) /* no call status? */ 413 if (!(ci->callstatus & CIST_STAT)) /* no call status? */