diff options
Diffstat (limited to 'src/lj_gc.c')
-rw-r--r-- | src/lj_gc.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/lj_gc.c b/src/lj_gc.c index e6a9d539..24403be3 100644 --- a/src/lj_gc.c +++ b/src/lj_gc.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #define white2gray(x) ((x)->gch.marked &= (uint8_t)~LJ_GC_WHITES) | 35 | #define white2gray(x) ((x)->gch.marked &= (uint8_t)~LJ_GC_WHITES) |
36 | #define gray2black(x) ((x)->gch.marked |= LJ_GC_BLACK) | 36 | #define gray2black(x) ((x)->gch.marked |= LJ_GC_BLACK) |
37 | #define isfinalized(u) ((u)->marked & LJ_GC_FINALIZED) | 37 | #define isfinalized(u) ((u)->marked & LJ_GC_FINALIZED) |
38 | #define markfinalized(u) ((u)->marked |= LJ_GC_FINALIZED) | ||
39 | 38 | ||
40 | /* -- Mark phase ---------------------------------------------------------- */ | 39 | /* -- Mark phase ---------------------------------------------------------- */ |
41 | 40 | ||
@@ -122,7 +121,7 @@ static void gc_mark_mmudata(global_State *g) | |||
122 | } | 121 | } |
123 | } | 122 | } |
124 | 123 | ||
125 | /* Separate userdata which which needs finalization to mmudata list. */ | 124 | /* Separate userdata objects to be finalized to mmudata list. */ |
126 | size_t lj_gc_separateudata(global_State *g, int all) | 125 | size_t lj_gc_separateudata(global_State *g, int all) |
127 | { | 126 | { |
128 | size_t m = 0; | 127 | size_t m = 0; |
@@ -132,11 +131,11 @@ size_t lj_gc_separateudata(global_State *g, int all) | |||
132 | if (!(iswhite(o) || all) || isfinalized(gco2ud(o))) { | 131 | if (!(iswhite(o) || all) || isfinalized(gco2ud(o))) { |
133 | p = &o->gch.nextgc; /* Nothing to do. */ | 132 | p = &o->gch.nextgc; /* Nothing to do. */ |
134 | } else if (!lj_meta_fastg(g, tabref(gco2ud(o)->metatable), MM_gc)) { | 133 | } else if (!lj_meta_fastg(g, tabref(gco2ud(o)->metatable), MM_gc)) { |
135 | markfinalized(gco2ud(o)); /* Done, as there's no __gc metamethod. */ | 134 | markfinalized(o); /* Done, as there's no __gc metamethod. */ |
136 | p = &o->gch.nextgc; | 135 | p = &o->gch.nextgc; |
137 | } else { /* Otherwise move userdata to be finalized to mmudata list. */ | 136 | } else { /* Otherwise move userdata to be finalized to mmudata list. */ |
138 | m += sizeudata(gco2ud(o)); | 137 | m += sizeudata(gco2ud(o)); |
139 | markfinalized(gco2ud(o)); | 138 | markfinalized(o); |
140 | *p = o->gch.nextgc; | 139 | *p = o->gch.nextgc; |
141 | if (gcref(g->gc.mmudata)) { /* Link to end of mmudata list. */ | 140 | if (gcref(g->gc.mmudata)) { /* Link to end of mmudata list. */ |
142 | GCobj *root = gcref(g->gc.mmudata); | 141 | GCobj *root = gcref(g->gc.mmudata); |