diff --git a/src/lfunc.c b/src/lfunc.c index 59eed36..1715dbe 100644 --- a/src/lfunc.c +++ b/src/lfunc.c @@ -185,9 +185,10 @@ void luaF_close (lua_State *L, StkId level) { if (uv->refcount == 0) /* no references? */ luaM_free(L, uv); /* free upvalue */ else { - setobj(L, &uv->u.value, uv->v); /* move value to upvalue slot */ - uv->v = &uv->u.value; /* now current value lives here */ - luaC_upvalbarrier(L, uv); + TValue* slot = &uv->u.value; /* new position for value */ + setobj(L, slot, uv->v); /* move value to upvalue slot */ + uv->v = slot; /* now current value lives here */ + luaC_upvalbarrier(L, uv, slot); } } }