[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Crash in a library when un loading.
- From: Roberto Ierusalimschy <roberto@...>
- Date: Fri, 19 Mar 2010 08:49:51 -0300
> Hi everyone. I'm experiencing a crash when a C module is unloaded. I think I
> know what is the cause but it seems strange that it is failing.
>
> Part of the relevant code below:
>
> static int module_cleanup(lua_State* L) {
> return 0;
> }
>
> extern "C" __declspec(dllexport) int luaopen_mymodule(lua_State* L) {
> /* env.__gc = module_cleanup */
> lua_pushcclosure(L, module_cleanup, 0);
> lua_setfield(L, LUA_ENVIRONINDEX, "__gc");
>
> lua_newtable(L);
> return 1;
> }
>
>
> The thing is that when the Lua state is closed, the module is unloaded first
> and then the function 'module_cleanup' is (tried to be) called.
Is this what is happening or what you think it is happening?
> Obviously, when I don't assign a __gc field to the environment the problem
> does not occur.
>
> Does this mean that the environment is its own metatable? If not, is this a
> bug?
Even if the environment was its own metatable it would not matter, because
tables do not call __gc methods. Is the environment a metatable for some
userdata?
-- Roberto