CVSROOT: /cvs/guile Module name: guile Changes by: mdj@egcs.cygnus.com 99/07/24 16:08:55 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_sweep): Use value returned from scm_ptobs[].free.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@egcs.cygnus.com 99/07/31 10:01:06 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_must_malloc, scm_must_realloc): Removed unnecessary code, particularly an unnecessary test (len != size, where len == size). (Was this leftovers from debugging code, or have I missed something profound?)
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@egcs.cygnus.com 99/08/28 20:26:21 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_mark): Mark 1 procedure slot in entities instead of 4.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@egcs.cygnus.com 99/08/29 19:13:45 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_init_storage): Skip registration of cleanup on systems which lack atexit. (Is it important that cleanup is made properly? Maybe we should replace all `exit' with `scm_exit' and call cleanup there?)
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@egcs.cygnus.com 99/09/02 07:51:51 Modified files: guile-core/libguile: gc.c Log message: * gc.c (cleanup, scm_init_storage): Use on_exit if present and atexit not available. (sunos4.1.4 needs it.)
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@egcs.cygnus.com 99/09/02 08:15:12 Modified files: guile-core/libguile: gc.c Log message: Added prototype for on_exit
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/13 22:40:10 Modified files: guile-core/libguile: gc.c Log message: * __scm.h eq.c, eval.c, gc.c, hc.h, gh_data, hash.c, numbers.c, numbers.h, objects.c, ramap.c, random.c, unif.c, unif.h: Extensive rewrite of handling of real and complex numbers. (SCM_FLOATS, SCM_SINGLES): These #ifdef conditionals have been removed along with the support for floats. (Float vectors are still supported.) * gc.c (scm_freelist2): multi-cell freelists. (inner_map_free_list): map_free_list, parameterized on ncells. "nn cells in segment mm" was misleading for ncells > 1; changed to "objects". still print cells too, though. (scm_map_free_list): rewritten using inner_map_free_list. (scm_check_freelist): get freelist as parameter, since now we have more than one. (scm_debug_newcell2): multi-cell variants of scm_debug_newcell. (scm_gc_for_newcell): take ncells and freelist pointer as parameters. (scm_gc_mark): add case for tc7_pws (procedures with setters are now double cells). (scm_gc_sweep): don't free the float data, since it's not malloced anymore. (init_heap_seg): didn't understand what n_new_objects stood for, so changed to n_new_cells. (make_initial_segment): new function, makes an initial segment according to given ncells. (scm_init_storage): call make_initial_segment, for ncells={1,2,3}.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/14 01:02:52 Modified files: guile-core/libguile: gc.c Log message: * gc.c (SCM_INIT_HEAP_SIZE): Changed from 32768 --> 40000 so that all of Guile basics fits into one segment and there suitable room for work. (SCM_EXPHEAP): Now takes an argument. Grow by a factor of 1.5 instead of 2. (scm_freelist, scm_freelist2): Now of type scm_freelist_t. Freelists now contains information about object span, cells collected and amount of cells in heap segments belonging to the list. (scm_heap_size, scm_gc_cells_collected): Removed.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/15 16:04:33 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_sweep): Sigh... forgot to clear private freelists after GC.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/15 17:18:13 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_sweep): Moved variable n_objects to inner sweep loop and declare as register.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/15 20:21:20 Modified files: guile-core/libguile: gc.c Log message:
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/15 20:26:12 Modified files: guile-core/libguile: gc.c Log message:
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/17 00:58:27 Modified files: guile-core/libguile: gc.c Log message: * gc.c, gc.h: Cleanup of the change of 2000-03-15. Cluster sizes are now independent of GC trigger values. GUILE_GC_TRIGGER_n can now specify a relative trigger value: A negative integer gives fraction of total heap size in percent. (SCM_GC_TRIGGER_1, SCM_GC_TRIGGER_2): Default values set to -40.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/17 01:04:49 Modified files: guile-core/libguile: gc.c Log message: (SCM_GC_TRIGGER_1, SCM_GC_TRIGGER_2): Default values set to -50.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/19 12:05:02 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_for_newcell, adjust_gc_trigger): Improved GC trigger adjustmeant: Take yield (freed cells) for all freelists into account. (SCM_INIT_HEAP_SIZE_1, SCM_GC_TRIGGER_1, SCM_GC_TRIGGER_2): Tuned to 50000 cell heap with 45% trigger. (scm_gc_cells_collected): Reintroduced. (SCM_HEAP_SIZE): New macro. (scm_gc_sweep): Reintroduced correct computation of scm_cells_allocated. (scm_freelist_t): Corrected commentary for field `cluster_size': Clustersize counts objects, not cells; New member `clusters_allocated'.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/20 05:39:34 Modified files: guile-core/libguile: gc.c Log message: * gc.c (adjust_gc_trigger): Improved documentation. (alloc_some_heap): Since gc_trigger is used against freelist->collected, this is the value which should be used to predict minimum growth.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/20 06:57:04 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_stats): Inserted explanation of local_scm_mtrigger etc. (scm_gc_yield_1): New variable: Holds previous yield. Used to make better judgements.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/20 07:05:34 Modified files: guile-core/libguile: gc.c Log message: (gc_sweep_freelist_finish): Inserted explanation of use of gc_trigger.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/20 18:37:59 Modified files: guile-core/libguile: gc.c Log message: * gc.c (alloc_some_heap): Further improvement of minimal heap size prediction. (SCM_MAX): New macro. (scm_freelist_t): New field: collected_1. Previous amount of collected cells. (gc_sweep_freelist_finish): Trigger based on two last values of freelist->collected to avoid unnecessary allocation due to temporary peaks.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/20 19:57:54 Modified files: guile-core/libguile: gc.c Log message: * gc.c, gc.h (SCM_MIN_YIELD_1, SCM_MIN_YIELD_2, min_yield_fraction, min_yield, adjust_min_yield): Renamed from SCM_GC_TRIGGER_1, SCM_GC_TRIGGER_2, gc_trigger_fraction, gc_trigger, adjust_gc_trigger. * gc.c (SCM_INIT_HEAP_SIZE_1, SCM_GC_TRIGGER_1, SCM_GC_TRIGGER_2): Adjusted to 45000 cells, 40% and 40%. Gives quick startup without extra heap allocation.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/21 12:33:18 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_mark): Bugfix 1: The recent SCM_PACK/UNPACK change made SCM values into pointers. This turned an arithmetic computation of the address of the vcell into a pointer-arithmetic one, thereby screwing up marking of structs. Bugfix 2: Removed incompletely introduced loop variable `j' used when protecting the tail array of a struct.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/21 18:12:24 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_sweep): SCM_PACK/UNPACK corrections.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/03/23 05:04:28 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_mark_locations): Changed * (SCM **) X --> * (SCM *) X in order to obtain a value of type SCM. (scm_cellp): Updated with new changes to scm_mark_locations.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/04/20 17:26:36 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_must_malloc, scm_must_realloc, scm_must_free): Added calls to malloc debugging functions.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/04/21 16:11:29 Modified files: guile-core/libguile: gc.c Log message: * gc.c: Removed #include "libguile/guardians.h". (scm_before_gc_c_hook, scm_before_mark_c_hook, scm_before_sweep_c_hook, scm_after_sweep_c_hook, scm_after_gc_c_hook): New C level hooks. (scm_after_gc_hook): New Scheme level hook. (scm_gc_sweep): Moved scanning of weak vectors to weaks.c. (scm_igc): Moved initialization of scm_weak_vectors and the call to scm_guardian_gc_init to respective module. (scm_mark_weak_vector_spines): Moved to weaks.c; Call to scm_guardian_zombify moved to guardians.c; Run scm_before_gc_c_hook, scm_before_sweep_c_hook, scm_after_gc_c_hook at appropriate places. (scm_init_gc): Initialize scm_after_gc_hook.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/06/14 08:00:52 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_protect_object): Avoid looking up the object handle twice. (scm_unprotect_object): Abort if scm_unprotect_object is called on an unprotected object.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/06/19 03:03:58 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_protect_object): Updated comment.
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 00/06/29 16:47:00 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_for_newcell): Behave gracefully also if scm_igc doesn't yield any new cells. In theory this could happen if all cells allocated with NEWCELL are either in use or conservatively marked and all cluster spine cells are conservatively marked. (Thanks to Dirk.)
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 2000-08-09 11:29:11 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_mark, scm_gc_sweep): Remove vcell = 1 magic. (scm_structs_to_free): New variable. (scm_gc_sweep): Hook up structs to free on the scm_structs_to_free chain.
CVSROOT: /cvs/guile Module name: guile Changes by: cmm@sourceware.cygnus.com 2000-08-17 13:38:45 Modified files: guile-core/libguile: gc.c Log message: * gc.c: (scm_default_init_heap_size_*): defined to take cards into account, but keeping more or less the same values as previously. added some simple helper macros. (CLUSTER_SIZE_IN_BYTES, ALIGNMENT_SLACK): defined to take cards into account. (BVEC_*, scm_mark_space_t, current_mark_space, mark_space_ptr, current_mark_space_offset, mark_space_head, get_bvec, clear_mark_space): new functions and supporting variables, types and macros that implement mark space management. (scm_igc): clear the mark space (all of it) before beginning the mark phase. (scm_gc_mark): changed the tests for rogue cells, much simplified throughout (no different mark bit locations to worry about now). (scm_mark_locations): don't consider card header cells. (scm_cellp): ditto. (scm_gc_sweep): simplified. (init_heap_seg): changed to take cards into account.
CVSROOT: /cvs/guile Module name: guile Changes by: cmm@sourceware.cygnus.com 2000-08-19 12:20:21 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_sweep): added a `continue' statement that have fallen through the cracks in the merge. thanks to Shuji Narazaki!
CVSROOT: /cvs/guile Module name: guile Changes by: mdj@sourceware.cygnus.com 2000-08-23 11:22:07 Modified files: guile-core/libguile: gc.c Log message: * gc.c (scm_gc_mark): Don't use GUILE_DEBUG flag to compile in extra tests. (GUILE_DEBUG is only supposed to make extra debugging functions available.)