diff options
author | Mike Pall <mike> | 2016-06-03 06:54:06 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2016-06-03 06:54:06 +0200 |
commit | ce1ad870c3d9536c759ecada89717c3317d56a3d (patch) | |
tree | c197808886cbbc3120bde5755ba692df60d9cf26 | |
parent | cc05e79181992d0d595b44f13538486315667491 (diff) | |
download | luajit-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.c | 10 |
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 | ||