[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Userdata memory is not freed
- From: Shmuel Zeigerman <shmuz@...>
- Date: Thu, 19 Apr 2007 16:51:11 +0200
I've got a case where the memory occupied by a userdatum
is not freed, even though Lua calls its __gc method.
I'm failing to understand that, any help is appreciated!
(Lua 5.1.2)
testlib.c and test.lua follow:
/* testlib.c */
#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"
static int new_udata (lua_State *L) {
int size = luaL_optinteger (L, 1, 32768);
lua_newuserdata (L, size);
lua_pushvalue(L, LUA_ENVIRONINDEX);
lua_setmetatable (L, -2);
return 1;
}
static int udata_gc (lua_State *L) {
(void)L;
printf("inside __gc\n");
return 0;
}
static const luaL_reg meta[] = {
{ "__gc", udata_gc },
{ NULL, NULL }
};
static const luaL_reg lib[] = {
{ "new", new_udata },
{ NULL, NULL }
};
LUALIB_API int luaopen_testlib (lua_State *L) {
/* create a new function environment */
lua_newtable (L);
lua_pushvalue (L, -1);
lua_replace (L, LUA_ENVIRONINDEX);
luaL_register (L, NULL, meta);
/* register functions */
luaL_register (L, "testlib", lib);
return 1;
}
-- test.lua
require "testlib"
print("1:", collectgarbage"count") --> 22 KB
testlib.new(2^20)
print("2:", collectgarbage"count") --> 1046 KB
collectgarbage"collect"
print("3:", collectgarbage"count") --> 1044 KB
--
Shmuel