diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2013-08-07 09:18:11 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2013-08-07 09:18:11 -0300 |
| commit | 623e388bb4c75eb07af3b7f83c736841d9fb76f0 (patch) | |
| tree | f0c64d3c1b0f385b1b31536dd46ccd0c55b57a0b /lstate.h | |
| parent | 677d90165ffef728231340c6328e9661824dbc34 (diff) | |
| download | lua-623e388bb4c75eb07af3b7f83c736841d9fb76f0.tar.gz lua-623e388bb4c75eb07af3b7f83c736841d9fb76f0.tar.bz2 lua-623e388bb4c75eb07af3b7f83c736841d9fb76f0.zip | |
double-linked list of all upvalues elliminated and changed to a
traversal of all non-marked threads
Diffstat (limited to 'lstate.h')
| -rw-r--r-- | lstate.h | 20 |
1 files changed, 10 insertions, 10 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstate.h,v 2.82 2012/07/02 13:37:04 roberto Exp roberto $ | 2 | ** $Id: lstate.h,v 2.83 2013/08/05 16:58:28 roberto Exp roberto $ |
| 3 | ** Global State | 3 | ** Global State |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -20,17 +20,18 @@ | |||
| 20 | ** be kept somehow accessible until being freed. | 20 | ** be kept somehow accessible until being freed. |
| 21 | ** | 21 | ** |
| 22 | ** Lua keeps most objects linked in list g->allgc. The link uses field | 22 | ** Lua keeps most objects linked in list g->allgc. The link uses field |
| 23 | ** 'next' of the CommonHeader. | 23 | ** 'next' of the CommonHeader. Threads (except the main one) ar kept |
| 24 | ** at the end of the 'allgc' list, after the 'l_registry' (which is | ||
| 25 | ** the first object to be added to the list). | ||
| 24 | ** | 26 | ** |
| 25 | ** Strings are kept in several lists headed by the array g->strt.hash. | 27 | ** Short strings are kept in several lists headed by the array g->strt.hash. |
| 26 | ** | 28 | ** |
| 27 | ** Open upvalues are not subject to independent garbage collection. They | 29 | ** Open upvalues are not subject to independent garbage collection. They |
| 28 | ** are collected together with their respective threads. Lua keeps a | 30 | ** are collected together with their respective threads. (They are |
| 29 | ** double-linked list with all open upvalues (g->uvhead) so that it can | 31 | ** always gray, so they must be remarked in the atomic step. Usually |
| 30 | ** mark objects referred by them. (They are always gray, so they must | 32 | ** their contents would be marked when traversing the respective |
| 31 | ** be remarked in the atomic step. Usually their contents would be marked | 33 | ** threads, but the thread may already be dead, while the upvalue is |
| 32 | ** when traversing the respective threads, but the thread may already be | 34 | ** still accessible through closures.) |
| 33 | ** dead, while the upvalue is still accessible through closures.) | ||
| 34 | ** | 35 | ** |
| 35 | ** Objects with finalizers are kept in the list g->finobj. | 36 | ** Objects with finalizers are kept in the list g->finobj. |
| 36 | ** | 37 | ** |
| @@ -133,7 +134,6 @@ typedef struct global_State { | |||
| 133 | GCObject *ephemeron; /* list of ephemeron tables (weak keys) */ | 134 | GCObject *ephemeron; /* list of ephemeron tables (weak keys) */ |
| 134 | GCObject *allweak; /* list of all-weak tables */ | 135 | GCObject *allweak; /* list of all-weak tables */ |
| 135 | GCObject *tobefnz; /* list of userdata to be GC */ | 136 | GCObject *tobefnz; /* list of userdata to be GC */ |
| 136 | UpVal uvhead; /* head of double-linked list of all open upvalues */ | ||
| 137 | Mbuffer buff; /* temporary buffer for string concatenation */ | 137 | Mbuffer buff; /* temporary buffer for string concatenation */ |
| 138 | int gcpause; /* size of pause between successive GCs */ | 138 | int gcpause; /* size of pause between successive GCs */ |
| 139 | int gcstepmul; /* GC `granularity' */ | 139 | int gcstepmul; /* GC `granularity' */ |
