[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: cleanup in a C module
- From: HyperHacker <hyperhacker@...>
- Date: Wed, 23 Jun 2010 01:39:15 -0600
On Wed, Jun 23, 2010 at 01:16, Andreas K. Foerster <list@akfoerster.de> wrote:
> Hallo,
>
> I'm new to Lua. So bear with me if my questions are a little stupid.
> But I have some problems with it for which I couldn't find a proper
> solution yet.
>
> First what I have: I have written a library, AKFAvatar, that is based on SDL.
> Now I want it to be scriptable with Lua. It already works to a large extent.
>
> One problem is, how can I cause the Lua script to return successfully, ie. without
> an error, from within the C code? I don't want to put the burden to check for
> conditions on the Lua programmer, so I want to do it from the C code.
> My workaround for now is, that I use the function lua_error(), but instead of an
> error message I simply push a nil to the stack, and the calling program checks for
> that and reacts accordingly. That works, but there is surely a better solution,
> isn't it?
>
> Then I wanted to compile the language binding as a module. That works fine as
> long as it runs. But I have the problem, that I don't know how to do the
> cleanup afterwards.
> In the application I simply register the cleanup function with atexit(3).
> But when I use atexit inside the module it just hangs at the end.
> Well, the SDL documentation says: "using atexit in a library is a sure way to
> crash dynamically loaded code". But what else can I use?
>
> (By the way, that problem already appeared before I did the workaround
> described above. So there is no connection.)
>
>
> If you want to have a look at my code, the Lua-specific parts are there:
> http://git.savannah.gnu.org/cgit/akfavatar.git/tree/lua
>
> Homepage of AKFAvatar:
> http://akfavatar.nongnu.org/
>
> --
> AKFoerster
>
I'm not sure I understand the first question, but if you want to have
a C function executed on any error, you can pass it to lua_pcall.
--
Sent from my toaster.