memory overflow tries a garbage collection; if it fails then exit the
program.
This commit is contained in:
20
luamem.c
20
luamem.c
@@ -3,13 +3,27 @@
|
||||
** TecCGraf - PUC-Rio
|
||||
*/
|
||||
|
||||
char *rcs_mem = "$Id: mem.c,v 1.4 1995/01/13 22:11:12 roberto Exp roberto $";
|
||||
char *rcs_mem = "$Id: mem.c,v 1.5 1995/02/06 19:34:03 roberto Exp roberto $";
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "mem.h"
|
||||
#include "lua.h"
|
||||
#include "table.h"
|
||||
|
||||
static void mem_error (void)
|
||||
{
|
||||
Long recovered = luaI_collectgarbage(); /* try to collect garbage */
|
||||
if (recovered)
|
||||
lua_error("not enough memory");
|
||||
else
|
||||
{ /* if there is no garbage then must exit */
|
||||
printf(stderr, "lua error: memory overflow - unable to recover\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void luaI_free (void *block)
|
||||
{
|
||||
@@ -22,7 +36,7 @@ void *luaI_malloc (unsigned long size)
|
||||
{
|
||||
void *block = malloc((size_t)size);
|
||||
if (block == NULL)
|
||||
lua_error("not enough memory");
|
||||
mem_error();
|
||||
return block;
|
||||
}
|
||||
|
||||
@@ -31,7 +45,7 @@ void *luaI_realloc (void *oldblock, unsigned long size)
|
||||
{
|
||||
void *block = realloc(oldblock, (size_t)size);
|
||||
if (block == NULL)
|
||||
lua_error("not enough memory");
|
||||
mem_error();
|
||||
return block;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user