aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1996-02-08 17:08:34 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1996-02-08 17:08:34 -0200
commit369c5fe3c056f80dc29a59a21535d2984c880b24 (patch)
treed3594bad2cb9a2a7f827f32a1ec3fde9ed93dc17
parent7918c6cf113a2e05cd5b952588a240c268ca01a2 (diff)
downloadlua-369c5fe3c056f80dc29a59a21535d2984c880b24.tar.gz
lua-369c5fe3c056f80dc29a59a21535d2984c880b24.tar.bz2
lua-369c5fe3c056f80dc29a59a21535d2984c880b24.zip
lock mechanism more robust; nil is pseudo-locked under index -1.
-rw-r--r--fallback.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/fallback.c b/fallback.c
index 13b763f9..00eb458a 100644
--- a/fallback.c
+++ b/fallback.c
@@ -3,7 +3,7 @@
3** TecCGraf - PUC-Rio 3** TecCGraf - PUC-Rio
4*/ 4*/
5 5
6char *rcs_fallback="$Id: fallback.c,v 1.17 1995/10/17 14:30:05 roberto Exp roberto $"; 6char *rcs_fallback="$Id: fallback.c,v 1.18 1996/01/30 15:25:23 roberto Exp roberto $";
7 7
8#include <stdio.h> 8#include <stdio.h>
9#include <string.h> 9#include <string.h>
@@ -123,7 +123,7 @@ int luaI_lock (Object *object)
123 Word i; 123 Word i;
124 Word oldSize; 124 Word oldSize;
125 if (tag(object) == LUA_T_NIL) 125 if (tag(object) == LUA_T_NIL)
126 return -1; 126 return -1; /* special lock ref for nil */
127 for (i=0; i<lockSize; i++) 127 for (i=0; i<lockSize; i++)
128 if (tag(&lockArray[i]) == LUA_T_NIL) 128 if (tag(&lockArray[i]) == LUA_T_NIL)
129 { 129 {
@@ -151,13 +151,18 @@ int luaI_lock (Object *object)
151 151
152void lua_unlock (int ref) 152void lua_unlock (int ref)
153{ 153{
154 tag(&lockArray[ref]) = LUA_T_NIL; 154 if (ref >= 0 && ref < lockSize)
155 tag(&lockArray[ref]) = LUA_T_NIL;
155} 156}
156 157
157 158
158Object *luaI_getlocked (int ref) 159Object *luaI_getlocked (int ref)
159{ 160{
160 return &lockArray[ref]; 161 static Object nul = {LUA_T_NIL, {0}};
162 if (ref >= 0 && ref < lockSize)
163 return &lockArray[ref];
164 else
165 return &nul;
161} 166}
162 167
163 168