aboutsummaryrefslogtreecommitdiff
path: root/lapi.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2004-06-30 11:15:23 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2004-06-30 11:15:23 -0300
commit96917ff42a7867e72629d6cd39c818df4c250b91 (patch)
tree1f6268e8709692e64ae69dfd88891a903d51749c /lapi.c
parenta6179adf12d78e7e1fedee42440127f3e1786f3d (diff)
downloadlua-96917ff42a7867e72629d6cd39c818df4c250b91.tar.gz
lua-96917ff42a7867e72629d6cd39c818df4c250b91.tar.bz2
lua-96917ff42a7867e72629d6cd39c818df4c250b91.zip
"step" option in lua_gc also need to lock Lua.
Diffstat (limited to 'lapi.c')
-rw-r--r--lapi.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/lapi.c b/lapi.c
index a7b3678d..a5b27ab7 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 2.11 2004/06/04 15:30:53 roberto Exp roberto $ 2** $Id: lapi.c,v 2.12 2004/06/08 14:31:00 roberto Exp roberto $
3** Lua API 3** Lua API
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -820,25 +820,26 @@ LUA_API int lua_dump (lua_State *L, lua_Chunkwriter writer, void *data) {
820*/ 820*/
821 821
822LUA_API int lua_gc (lua_State *L, int what, int data) { 822LUA_API int lua_gc (lua_State *L, int what, int data) {
823 global_State *g = G(L); 823 int res = 0;
824 global_State *g;
825 lua_lock(L);
826 g = G(L);
824 switch (what) { 827 switch (what) {
825 case LUA_GCSTOP: { 828 case LUA_GCSTOP: {
826 g->GCthreshold = MAXLMEM; 829 g->GCthreshold = MAXLMEM;
827 return 0; 830 break;
828 } 831 }
829 case LUA_GCRESTART: { 832 case LUA_GCRESTART: {
830 g->GCthreshold = g->nblocks; 833 g->GCthreshold = g->nblocks;
831 return 0; 834 break;
832 } 835 }
833 case LUA_GCCOLLECT: { 836 case LUA_GCCOLLECT: {
834 lua_lock(L);
835 luaC_fullgc(L); 837 luaC_fullgc(L);
836 lua_unlock(L); 838 break;
837 return 0;
838 } 839 }
839 case LUA_GCCOUNT: { 840 case LUA_GCCOUNT: {
840 /* GC values are expressed in Kbytes: #bytes/2^10 */ 841 /* GC values are expressed in Kbytes: #bytes/2^10 */
841 return cast(int, g->nblocks >> 10); 842 res = cast(int, g->nblocks >> 10);
842 } 843 }
843 case LUA_GCSTEP: { 844 case LUA_GCSTEP: {
844 lu_mem a = (cast(lu_mem, data) << 10); 845 lu_mem a = (cast(lu_mem, data) << 10);
@@ -847,10 +848,12 @@ LUA_API int lua_gc (lua_State *L, int what, int data) {
847 else 848 else
848 g->GCthreshold = 0; 849 g->GCthreshold = 0;
849 luaC_step(L); 850 luaC_step(L);
850 return 0; 851 break;
851 } 852 }
852 default: return -1; /* invalid option */ 853 default: res = -1; /* invalid option */
853 } 854 }
855 lua_unlock(L);
856 return res;
854} 857}
855 858
856 859