diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-02-02 13:13:05 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-02-02 13:13:05 -0200 |
| commit | 426d3e43bdec4b1ab2b0aed1844396c27f64872f (patch) | |
| tree | 659b73e1e9720fb85c66a481b476c96671eef734 /lgc.c | |
| parent | 8823f371a2a63f634121a0c16cb1d02e5ce9f5c5 (diff) | |
| download | lua-426d3e43bdec4b1ab2b0aed1844396c27f64872f.tar.gz lua-426d3e43bdec4b1ab2b0aed1844396c27f64872f.tar.bz2 lua-426d3e43bdec4b1ab2b0aed1844396c27f64872f.zip | |
lock/unlock may use L + better structure for internal debug stuff
Diffstat (limited to 'lgc.c')
| -rw-r--r-- | lgc.c | 17 |
1 files changed, 16 insertions, 1 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lgc.c,v 1.83 2001/01/29 19:34:02 roberto Exp roberto $ | 2 | ** $Id: lgc.c,v 1.84 2001/02/01 17:40:48 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 | */ |
| @@ -17,6 +17,19 @@ | |||
| 17 | #include "ltm.h" | 17 | #include "ltm.h" |
| 18 | 18 | ||
| 19 | 19 | ||
| 20 | /* | ||
| 21 | ** optional "lock" for GC | ||
| 22 | ** (when Lua calls GC tag methods it unlocks the regular lock) | ||
| 23 | */ | ||
| 24 | #ifndef LUA_LOCKGC | ||
| 25 | #define LUA_LOCKGC(L) { | ||
| 26 | #endif | ||
| 27 | |||
| 28 | #ifndef LUA_UNLOCKGC | ||
| 29 | #define LUA_UNLOCKGC(L) } | ||
| 30 | #endif | ||
| 31 | |||
| 32 | |||
| 20 | typedef struct GCState { | 33 | typedef struct GCState { |
| 21 | Hash *tmark; /* list of marked tables to be visited */ | 34 | Hash *tmark; /* list of marked tables to be visited */ |
| 22 | Closure *cmark; /* list of marked closures to be visited */ | 35 | Closure *cmark; /* list of marked closures to be visited */ |
| @@ -351,12 +364,14 @@ static void callgcTMudata (lua_State *L) { | |||
| 351 | 364 | ||
| 352 | 365 | ||
| 353 | void luaC_collect (lua_State *L, int all) { | 366 | void luaC_collect (lua_State *L, int all) { |
| 367 | LUA_LOCKGC(L); | ||
| 354 | collectudata(L, all); | 368 | collectudata(L, all); |
| 355 | callgcTMudata(L); | 369 | callgcTMudata(L); |
| 356 | collectstrings(L, all); | 370 | collectstrings(L, all); |
| 357 | collecttable(L); | 371 | collecttable(L); |
| 358 | collectproto(L); | 372 | collectproto(L); |
| 359 | collectclosure(L); | 373 | collectclosure(L); |
| 374 | LUA_UNLOCKGC(L); | ||
| 360 | } | 375 | } |
| 361 | 376 | ||
| 362 | 377 | ||
