diff options
Diffstat (limited to 'src/lj_gc.c')
-rw-r--r-- | src/lj_gc.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/lj_gc.c b/src/lj_gc.c index cfbce037..1f382ea0 100644 --- a/src/lj_gc.c +++ b/src/lj_gc.c | |||
@@ -65,6 +65,12 @@ static void gc_mark(global_State *g, GCobj *o) | |||
65 | gray2black(o); /* Userdata are never gray. */ | 65 | gray2black(o); /* Userdata are never gray. */ |
66 | if (mt) gc_markobj(g, mt); | 66 | if (mt) gc_markobj(g, mt); |
67 | gc_markobj(g, tabref(gco2ud(o)->env)); | 67 | gc_markobj(g, tabref(gco2ud(o)->env)); |
68 | if (LJ_HASBUFFER && gco2ud(o)->udtype == UDTYPE_BUFFER) { | ||
69 | SBufExt *sbx = (SBufExt *)uddata(gco2ud(o)); | ||
70 | if (sbufiscow(sbx) && gcref(sbx->cowref) != NULL) { | ||
71 | gc_markobj(g, gcref(sbx->cowref)); | ||
72 | } | ||
73 | } | ||
68 | } else if (LJ_UNLIKELY(gct == ~LJ_TUPVAL)) { | 74 | } else if (LJ_UNLIKELY(gct == ~LJ_TUPVAL)) { |
69 | GCupval *uv = gco2uv(o); | 75 | GCupval *uv = gco2uv(o); |
70 | gc_marktv(g, uvval(uv)); | 76 | gc_marktv(g, uvval(uv)); |