diff options
Diffstat (limited to 'lgc.c')
| -rw-r--r-- | lgc.c | 15 |
1 files changed, 10 insertions, 5 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lgc.c,v 2.200 2014/11/02 19:19:04 roberto Exp roberto $ | 2 | ** $Id: lgc.c,v 2.201 2014/12/20 13:58:15 roberto Exp roberto $ |
| 3 | ** Garbage Collector | 3 | ** Garbage Collector |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -226,10 +226,14 @@ static void reallymarkobject (global_State *g, GCObject *o) { | |||
| 226 | reentry: | 226 | reentry: |
| 227 | white2gray(o); | 227 | white2gray(o); |
| 228 | switch (o->tt) { | 228 | switch (o->tt) { |
| 229 | case LUA_TSHRSTR: | 229 | case LUA_TSHRSTR: { |
| 230 | gray2black(o); | ||
| 231 | g->GCmemtrav += sizelstring(gco2ts(o)->shrlen); | ||
| 232 | break; | ||
| 233 | } | ||
| 230 | case LUA_TLNGSTR: { | 234 | case LUA_TLNGSTR: { |
| 231 | gray2black(o); | 235 | gray2black(o); |
| 232 | g->GCmemtrav += sizestring(gco2ts(o)); | 236 | g->GCmemtrav += sizelstring(gco2ts(o)->u.lnglen); |
| 233 | break; | 237 | break; |
| 234 | } | 238 | } |
| 235 | case LUA_TUSERDATA: { | 239 | case LUA_TUSERDATA: { |
| @@ -689,9 +693,10 @@ static void freeobj (lua_State *L, GCObject *o) { | |||
| 689 | case LUA_TUSERDATA: luaM_freemem(L, o, sizeudata(gco2u(o))); break; | 693 | case LUA_TUSERDATA: luaM_freemem(L, o, sizeudata(gco2u(o))); break; |
| 690 | case LUA_TSHRSTR: | 694 | case LUA_TSHRSTR: |
| 691 | luaS_remove(L, gco2ts(o)); /* remove it from hash table */ | 695 | luaS_remove(L, gco2ts(o)); /* remove it from hash table */ |
| 692 | /* go through */ | 696 | luaM_freemem(L, o, sizelstring(gco2ts(o)->shrlen)); |
| 697 | break; | ||
| 693 | case LUA_TLNGSTR: { | 698 | case LUA_TLNGSTR: { |
| 694 | luaM_freemem(L, o, sizestring(gco2ts(o))); | 699 | luaM_freemem(L, o, sizelstring(gco2ts(o)->u.lnglen)); |
| 695 | break; | 700 | break; |
| 696 | } | 701 | } |
| 697 | default: lua_assert(0); | 702 | default: lua_assert(0); |
