lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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