summaryrefslogtreecommitdiff
path: root/src/lj_gc.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-05-23 02:43:36 +0200
committerMike Pall <mike>2011-05-23 02:43:36 +0200
commit7b21a660a89367db4ab50a85aa32a1ffd5a88623 (patch)
tree937ab4fae2eb3611f2d67e9a1b4118e9accb4ed9 /src/lj_gc.c
parent288085afbe916ac334dbc88ee2da836fb837bbca (diff)
downloadluajit2-7b21a660a89367db4ab50a85aa32a1ffd5a88623.tar.gz
FFI: Fix __gc for VLA/VLS cdata objects.
Diffstat (limited to 'src/lj_gc.c')
-rw-r--r--src/lj_gc.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/lj_gc.c b/src/lj_gc.c
index 7999e31f..e65f7ffa 100644
--- a/src/lj_gc.c
+++ b/src/lj_gc.c
@@ -34,8 +34,6 @@
/* Macros to set GCobj colors and flags. */
#define white2gray(x) ((x)->gch.marked &= (uint8_t)~LJ_GC_WHITES)
#define gray2black(x) ((x)->gch.marked |= LJ_GC_BLACK)
-#define makewhite(g, x) \
- ((x)->gch.marked = ((x)->gch.marked & (uint8_t)~LJ_GC_COLORS) | curwhite(g))
#define isfinalized(u) ((u)->marked & LJ_GC_FINALIZED)
#define markfinalized(u) ((u)->marked |= LJ_GC_FINALIZED)
@@ -500,7 +498,8 @@ static void gc_finalize(lua_State *L)
/* Add cdata back to the GC list and make it white. */
setgcrefr(o->gch.nextgc, g->gc.root);
setgcref(g->gc.root, o);
- o->gch.marked = curwhite(g);
+ makewhite(g, o);
+ o->gch.marked &= (uint8_t)~LJ_GC_CDATA_FIN;
/* Resolve finalizer. */
setcdataV(L, &tmp, gco2cd(o));
tv = lj_tab_set(L, ctype_ctsG(g)->finalizer, &tmp);
@@ -544,7 +543,8 @@ void lj_gc_finalize_cdata(lua_State *L)
if (!tvisnil(&node[i].val) && tviscdata(&node[i].key)) {
GCobj *o = gcV(&node[i].key);
TValue tmp;
- o->gch.marked = curwhite(g);
+ makewhite(g, o);
+ o->gch.marked &= (uint8_t)~LJ_GC_CDATA_FIN;
copyTV(L, &tmp, &node[i].val);
setnilV(&node[i].val);
gc_call_finalizer(g, L, &tmp, o);