[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Return an exit code without os.exit()?
- From: Jim Pryor <lists+lua@...>
- Date: Sun, 22 Nov 2009 19:00:25 -0500
On Sun, Nov 22, 2009 at 06:31:57PM -0200, Roberto Ierusalimschy wrote:
> > Can I ask how this is implemented? I tried writing a C replacement for
> > os.exit like this:
> >
> > /* based on loslib.c */
> > static int os_exit (lua_State *L) {
> > int ret = luaL_optint(L, 1, EXIT_SUCCESS);
> > /* if optional arg[2] is true, close this lua_State before exiting */
> > if (lua_toboolean(L, 2)) {
> > printf("get ready\n");
> > lua_close(L);
> > printf("ok so far\n");
> > }
> > exit(ret);
> > }
> >
> > However, if I then run:
> > $ lua -l os_exit_replacement_library -e "os.exit(1,true)"
> >
> > I get:
> >
> > get ready
> > Segmentation fault
>
> It is implemented exaclty like this, except that it does not have the
> printfs. (But it works with the printfs too.) The segmentation fault
> probably is being caused by something else. (Maybe some finalizer?)
>
> Hint: the module finalizer for the dynamic library unloads it. So the
> problem may be the return to the C code, because it is not there anymore.
> (The standard libraries are not loaded through loadlib, so they are
> not unloaded by finalizers.)
I see. Thanks, that's probably what it is.
--
Jim Pryor
profjim@jimpryor.net