diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1996-01-22 12:15:13 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1996-01-22 12:15:13 -0200 |
commit | e74b250d71c9a72758d7bb586bb906cacd8293f6 (patch) | |
tree | bee1df3715c456e7ee1e591f0734cce34fff3195 /luamem.c | |
parent | cd54c95ee179dd1578e127745354aa6a59b72eb7 (diff) | |
download | lua-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.c | 20 |
1 files changed, 17 insertions, 3 deletions
@@ -3,13 +3,27 @@ | |||
3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_mem = "$Id: mem.c,v 1.4 1995/01/13 22:11:12 roberto Exp roberto $"; | 6 | char *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 | |||
16 | static 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 | ||
14 | void luaI_free (void *block) | 28 | void 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 | ||