Memory leak when set a table.var to Lua
BlitzMax Forums/BlitzMax Programming/Memory leak when set a table.var to Lua
| ||
| I have a BIG problem... From Lua I execute TimerLoop() every 10ms that set a Lua table.variable: SYS.MOBii_0 to SYS.MOBii_999 to its id value When I start the Application is 18.0 MB in the taskmgr and after 100 iterations my application has grown to 18.5 MB so after sending 100000 table.variable: SYS.MOBii_XX to the Lua from BlitzMax with: BLLua.MOBii_TableSetInt("SYS", "MOBii_" + a , i) the Application use 500000 more bytes! If I use BLLua.MOBii_SetInt("MOBii_" + a , i) the Application still eat memory but little less! Do I do anything Wrong with MOBii_TableSetInt? Lua script: ------------------------------------------------[TimerLoop]---
function TimerLoop()
if a == 100 then echo("value: "..SYS.MOBii_0) a = 0 end
MOBii(SYS.MOBii_0 + 1)
a = a + 1
end
BlitzMax code: lua_register(L, "MOBii", Lua_MOBii) ' Register my Test function
...
' -----------------------------------------------------------------------[BLLua.Lua_MOBii]---
Function Lua_MOBii:Int(_L:Byte Ptr)
If _L Then
Local i:Int = BLLua.MOBii_GetInt(1, "MOBii", 1, -1)
For Local a:Int = 0 To 999
BLLua.MOBii_TableSetInt("SYS", "MOBii_" + a , i)
' BLLua.MOBii_SetInt("MOBii_" + a , i)
Next
End If
Return 0
End Function
' ---------------------------------------------------------------[BLLua.MOBii_TableSetInt]---
Method MOBii_TableSetInt(_Table:String, _Namn:String, _Data:Int)
If L Then
lua_pushstring(L, _Table) ' put the table in varname
lua_gettable(L, LUA_GLOBALSINDEX)
lua_pushstring(L, _Namn) ' push the key
lua_pushinteger(L, _Data) ' 1st argument
lua_settable(L, -3) ' set table["key"] to "value"
lua_pop(L, 1) ' If I don't use this pop the application crash after 2 minutes..
End If
End Method
' --------------------------------------------------------------------[BLLua.MOBii_SetInt]---
Method MOBii_SetInt(_Namn:String, _Data:Int)
If L Then
lua_pushinteger(L, _Data)
lua_setglobal(L, _Namn)
End If
End Method
After some time the Application use more than 400Mb of memory and keeps growing... |
| ||
| Where did your blitzmax code come from? How does lua_pop work? Should you be calling it once, three times or none at all? |
| ||
| I'm not clear on the question. Your lua_pop is popping the table from the stack. Without it, you'll end up with 1000 table references on the stack (each iteration) and likely overflow its cache (thus the crash). |