aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2016-06-03 06:54:06 +0200
committerMike Pall <mike>2016-06-03 06:54:06 +0200
commitce1ad870c3d9536c759ecada89717c3317d56a3d (patch)
treec197808886cbbc3120bde5755ba692df60d9cf26
parentcc05e79181992d0d595b44f13538486315667491 (diff)
downloadluajit-ce1ad870c3d9536c759ecada89717c3317d56a3d.tar.gz
luajit-ce1ad870c3d9536c759ecada89717c3317d56a3d.tar.bz2
luajit-ce1ad870c3d9536c759ecada89717c3317d56a3d.zip
LJ_GC64: Set correct nil value when clearing a cdata finalizer.
Thanks to Stefan Pejic.
Diffstat (limited to '')
-rw-r--r--src/lj_cdata.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/lj_cdata.c b/src/lj_cdata.c
index 05e27dad..e8ffdbcb 100644
--- a/src/lj_cdata.c
+++ b/src/lj_cdata.c
@@ -93,11 +93,13 @@ void lj_cdata_setfin(lua_State *L, GCcdata *cd, GCobj *obj, uint32_t it)
93 setcdataV(L, &tmp, cd); 93 setcdataV(L, &tmp, cd);
94 lj_gc_anybarriert(L, t); 94 lj_gc_anybarriert(L, t);
95 tv = lj_tab_set(L, t, &tmp); 95 tv = lj_tab_set(L, t, &tmp);
96 setgcV(L, tv, obj, it); 96 if (it == LJ_TNIL) {
97 if (!tvisnil(tv)) 97 setnilV(tv);
98 cd->marked |= LJ_GC_CDATA_FIN;
99 else
100 cd->marked &= ~LJ_GC_CDATA_FIN; 98 cd->marked &= ~LJ_GC_CDATA_FIN;
99 } else {
100 setgcV(L, tv, obj, it);
101 cd->marked |= LJ_GC_CDATA_FIN;
102 }
101 } 103 }
102} 104}
103 105