GC to assemble a compacted heap image in newspace which it then writes out
to disk. Then the VM calls ABORT-GC to cancel the GC operation, which scans
the current space, fixing up the "broken hearts" -- restoring word 1 of
each structure that got clobbered with a forwarding pointer.
Unfortunately, someone (possibly myself) had inserted a post_gc_fdports() call
into the VM between the gc and the abort. This procedure updates a C vector of
Scheme values (fdports[]) by following forwarding pointers -- BUT -- in this
instance we didn't really want to break hearts, and the abort-gc code didn't
know about the fdports[] vector, so it couldn't undo the effects. This caused
the fdports[] vec to point into hyperspace after the image dump, and *that*
meant on the next GC, all the live ports were considered dead. Oops.
The fix was to remove this bogus call. The post_gc_fdports() proc is now
called only after a *real* GC.
-Olin
files. These files mostly mediate between the C source (export) and
the corresponding C stub files (import) generated by the Scheme files
calling the C routines.
This provided much better argument type checking that before; lots of
small bugs were caught.
Also added const keywords wherever I could find a reasonable place
to improve error detection and efficiency.
Tuned up the makefile to reflect all of this structure. Its dependencies
were pretty out-of-date as it was. It could probably use further work.
files. These files mostly mediate between the C source (export) and
the corresponding C stub files (import) generated by the Scheme files
calling the C routines.
This provided much better argument type checking that before; lots of
small bugs were caught.
Also added const keywords wherever I could find a reasonable place
to improve error detection and efficiency.
Tuned up the makefile to reflect all of this structure. It's dependencies
were pretty out-of-date as it was. It could probably use further work.