[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