aboutsummaryrefslogtreecommitdiff
path: root/hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/hash.c b/hash.c
index dd7db8f5..09ef8bcb 100644
--- a/hash.c
+++ b/hash.c
@@ -3,7 +3,7 @@
3** hash manager for lua 3** hash manager for lua
4*/ 4*/
5 5
6char *rcs_hash="$Id: hash.c,v 2.13 1994/11/07 15:19:51 roberto Exp roberto $"; 6char *rcs_hash="$Id: hash.c,v 2.14 1994/11/07 16:34:44 roberto Exp $";
7 7
8#include <string.h> 8#include <string.h>
9#include <stdlib.h> 9#include <stdlib.h>
@@ -169,6 +169,23 @@ void lua_hashmark (Hash *h)
169 } 169 }
170 } 170 }
171} 171}
172
173
174static void call_fallbacks (void)
175{
176 Hash *curr_array;
177 Object t;
178 tag(&t) = LUA_T_ARRAY;
179 for (curr_array = listhead; curr_array; curr_array = curr_array->next)
180 if (markarray(curr_array) != 1)
181 {
182 avalue(&t) = curr_array;
183 luaI_gcFB(&t);
184 }
185 tag(&t) = LUA_T_NIL;
186 luaI_gcFB(&t); /* end of list */
187}
188
172 189
173/* 190/*
174** Garbage collection to arrays 191** Garbage collection to arrays
@@ -177,6 +194,7 @@ void lua_hashmark (Hash *h)
177void lua_hashcollector (void) 194void lua_hashcollector (void)
178{ 195{
179 Hash *curr_array = listhead, *prev = NULL; 196 Hash *curr_array = listhead, *prev = NULL;
197 call_fallbacks();
180 while (curr_array != NULL) 198 while (curr_array != NULL)
181 { 199 {
182 Hash *next = curr_array->next; 200 Hash *next = curr_array->next;