aboutsummaryrefslogtreecommitdiff
path: root/luamem.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1996-01-22 12:15:13 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1996-01-22 12:15:13 -0200
commite74b250d71c9a72758d7bb586bb906cacd8293f6 (patch)
treebee1df3715c456e7ee1e591f0734cce34fff3195 /luamem.c
parentcd54c95ee179dd1578e127745354aa6a59b72eb7 (diff)
downloadlua-e74b250d71c9a72758d7bb586bb906cacd8293f6.tar.gz
lua-e74b250d71c9a72758d7bb586bb906cacd8293f6.tar.bz2
lua-e74b250d71c9a72758d7bb586bb906cacd8293f6.zip
memory overflow tries a garbage collection; if it fails then exit the
program.
Diffstat (limited to 'luamem.c')
-rw-r--r--luamem.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/luamem.c b/luamem.c
index a1428418..ce2ffff9 100644
--- a/luamem.c
+++ b/luamem.c
@@ -3,13 +3,27 @@
3** TecCGraf - PUC-Rio 3** TecCGraf - PUC-Rio
4*/ 4*/
5 5
6char *rcs_mem = "$Id: mem.c,v 1.4 1995/01/13 22:11:12 roberto Exp roberto $"; 6char *rcs_mem = "$Id: mem.c,v 1.5 1995/02/06 19:34:03 roberto Exp roberto $";
7 7
8#include <stdlib.h> 8#include <stdlib.h>
9#include <string.h> 9#include <string.h>
10#include <stdio.h>
10 11
11#include "mem.h" 12#include "mem.h"
12#include "lua.h" 13#include "lua.h"
14#include "table.h"
15
16static void mem_error (void)
17{
18 Long recovered = luaI_collectgarbage(); /* try to collect garbage */
19 if (recovered)
20 lua_error("not enough memory");
21 else
22 { /* if there is no garbage then must exit */
23 printf(stderr, "lua error: memory overflow - unable to recover\n");
24 exit(1);
25 }
26}
13 27
14void luaI_free (void *block) 28void luaI_free (void *block)
15{ 29{
@@ -22,7 +36,7 @@ void *luaI_malloc (unsigned long size)
22{ 36{
23 void *block = malloc((size_t)size); 37 void *block = malloc((size_t)size);
24 if (block == NULL) 38 if (block == NULL)
25 lua_error("not enough memory"); 39 mem_error();
26 return block; 40 return block;
27} 41}
28 42
@@ -31,7 +45,7 @@ void *luaI_realloc (void *oldblock, unsigned long size)
31{ 45{
32 void *block = realloc(oldblock, (size_t)size); 46 void *block = realloc(oldblock, (size_t)size);
33 if (block == NULL) 47 if (block == NULL)
34 lua_error("not enough memory"); 48 mem_error();
35 return block; 49 return block;
36} 50}
37 51