[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: C upvalue cleanup not being called
- From: David Crayford <dcrayford@...>
- Date: Fri, 14 Mar 2014 09:24:13 +0800
On 13/03/2014 9:16 PM, Philipp Janda wrote:
Am 13.03.2014 13:43 schröbte David Crayford:
It's my mistake for sure. I copied the code from lua-cjson and the
finalizer gets called in that code in 5.1
I know it's something stupid but I don't know the C API well enough to
fix it. The full code is here http://hastebin.com/likikexinu.coffee.
Your problem is that your finalizer method is pushed via
`lua_pushcfunction` which doesn't include any upvalues, so you can't
use your `fetch_config` function to access the userdata in
`destroy_config`. The userdata is passed as first argument to the
finalizer, so use
( ispf_config_t * )lua_touserdata( l, 1 );
Thanks, that works!
instead. I'd recommend to prohibit access to your metatable, or use
luaL_newmetatable and luaL_checkudata for additional type safety in
your finalizer. There is also an `int` missing for `destroy_config`.
The rest looks ok on first glance ...
I will take a look at that. Good eye btw.
On 12/03/2014 8:27 PM, Ignacio Burgueño wrote:
Unless I'm mistaken, that won't work with Lua 5.1 since the __gc
metamethod for tables was introduced in 5.2.
In this case, it does nothing. You'll need a userdata to achieve the
The code (the one in the OP) already uses `__gc` on a userdata.
You should take a look at Thijs Schreijer's "Lua Library Template"
For instance, this example does what you want: