[gambit-list] __cleanup() problem (OS X 10.6.6 / Gambit-C 4.6.0)

Marc Feeley feeley at iro.umontreal.ca
Wed Jan 12 08:36:10 EST 2011


On 2011-01-12, at 8:17 AM, David Dreisigmeyer wrote:

> It could be the call to ___release_foreign (in c_intf.c) that's
> causing the trouble.  The calling sequence is:
> 
> ___cleanup (setup.c) =>
> ___cleanup_mem (mem.c) =>
> free_still_objs (mem.c) =>
> ___release_foreign (c_intf.c)
> 
> 
> With this (modified) snippet from free_still_objs:

As far as I know, in the unmodified Gambit, there are no foreign objects with release functions.  So I don't understand why you get release_fn != NULL.  So if you comment out the call to the release_fn, does the problem go away?

> 
> Commenting out the call to ___cleanup_mem in ___cleanup, the code
> still fails on ___cleanup_os.  Here it seems to have something to do
> with ___device_group_cleanup in os_io.c.  Now the call sequence is:
> 
> ___cleanup (setup.c) =>
> ___cleanup_os (os.c) =>
> ___cleanup_io_module (os_io,c) =>
> io_module_cleanup (os_io,c) =>
> ___device_group_cleanup (os_io.c)
> 
> Here it seems to be a problem with the line:
> 
> if (___device_cleanup (dgroup->list) != ___FIX(___NO_ERR))
> 

It would be interesting to know which device is failing to cleanup properly.  My hunch is that Python is closing a file descriptor or changing an attribute of the file descriptor that Gambit expects to be in a particular state when it cleans up, so when it tries to close it (or call select on it), a failure is reported.  The failure will happen in one of the ___device_XXX_close_raw_virt functions in lib/os_io.c or lib/os_tty.c (most probably in ___device_file_close_raw_virt or ___device_tty_close_raw_virt).

Marc




More information about the Gambit-list mailing list