--- a/src/lapi.c 2017-12-06 13:35:12.000000000 -0500 +++ b/src/lapi_1.c 2019-06-24 07:48:06.289000000 -0400 @@ -1286,14 +1286,14 @@ LUA_API void *lua_upvalueid (lua_State * LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1, int fidx2, int n2) { - LClosure *f1; - UpVal **up1 = getupvalref(L, fidx1, n1, &f1); + UpVal **up1 = getupvalref(L, fidx1, n1, NULL); /* the last parameter not needed */ UpVal **up2 = getupvalref(L, fidx2, n2, NULL); + if (*up1 == *up2) return; /* Already joined */ + (*up2)->refcount++; + if (upisopen(*up2)) (*up2)->u.open.touched = 1; + luaC_upvalbarrier(L, *up2); luaC_upvdeccount(L, *up1); *up1 = *up2; - (*up1)->refcount++; - if (upisopen(*up1)) (*up1)->u.open.touched = 1; - luaC_upvalbarrier(L, *up1); }