My system again: OS X 10.6.6 and Gambit-C 4.6.0 from git.
I'm not getting that. The modified code is below. Here's what I get:
$ ./gambit_tester > hold
and hold looks like:
setup done Gambit-C : (+ 1 2) 3 Gambit-C result : 3
I even tried modifying ___cleanup:
___EXP_FUNC(void,___cleanup) ___PVOID { /* * Only do cleanup once after successful setup. */
printf ("setup_state : %i \n" , setup_state); fflush (stdout); sleep(30);
if (setup_state != 1) return;
setup_state = 2;
___cleanup_mem (); ___cleanup_os (); }
and it doesn't print or sleep.
--------------------------------------------------------
** Modified os_io.c:
/* #ifdef USE_POSIX if (close_no_EINTR (d->fd) < 0) return err_code_from_errno (); #endif */
#ifdef USE_POSIX if (d->fd > 2 && close_no_EINTR (d->fd) < 0) return err_code_from_errno (); #endif
#ifdef USE_WIN32 if (!CloseHandle (d->h)) return err_code_from_GetLastError (); #endif } else if (is_not_closed & direction & ___DIRECTION_RD) d->base.base.read_stage = ___STAGE_CLOSED; else if (is_not_closed & direction & ___DIRECTION_WR) d->base.base.write_stage = ___STAGE_CLOSED;
return ___FIX(___NO_ERR); }
--------------------------------------------------------
** Modified ___device_tty_cleanup (tried commenting out #ifdef USE_POSIX ... #endif also:
___HIDDEN ___SCMOBJ ___device_tty_cleanup ___P((___device_tty *self), (self) ___device_tty *self;) {
___device_tty *d = self; ___SCMOBJ e;
/* #ifdef USE_LINEEDITOR
lineeditor_cleanup (d);
#endif
if (d->stage >= TTY_STAGE_MODE_NOT_SAVED) { if (d->stage >= TTY_STAGE_MODE_NOT_SET) { if ((e = ___device_tty_mode_restore (d, 1)) != ___FIX(___NO_ERR)) return e; } */ #ifdef USE_POSIX if (close (d->fd) < 0) return err_code_from_errno (); #endif /* #ifdef USE_WIN32 if (!CloseHandle (d->hin)) return err_code_from_GetLastError (); if (!CloseHandle (d->hout)) return err_code_from_GetLastError (); #endif } */ return ___FIX(___NO_ERR); }