diff options
Diffstat (limited to 'libguile/gc-card.c')
-rw-r--r-- | libguile/gc-card.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/libguile/gc-card.c b/libguile/gc-card.c index 6f82488ba..309ac88ab 100644 --- a/libguile/gc-card.c +++ b/libguile/gc-card.c @@ -86,12 +86,13 @@ scm_i_sweep_card (scm_t_cell * p, SCM *free_list, int span) int offset =SCM_MAX (SCM_GC_CARD_N_HEADER_CELLS, span); int free_count = 0; + ++ scm_gc_running_p; + /* I tried something fancy with shifting by one bit every word from the bitvec in turn, but it wasn't any faster, but quite bit hairier. */ - for (p += offset; p < end; p += span, offset += span) { SCM scmptr = PTR2SCM(p); @@ -273,6 +274,8 @@ scm_i_sweep_card (scm_t_cell * p, SCM *free_list, int span) *free_list = PTR2SCM (p); free_count ++; } + + --scm_gc_running_p; return free_count; } #undef FUNC_NAME @@ -301,6 +304,7 @@ scm_init_card_freelist (scm_t_cell * card, SCM *free_list, int span) } + #if 0 /* These functions are meant to be called from GDB as a debug aid. @@ -318,6 +322,16 @@ typedef struct scm_t_list_cell_struct { struct scm_t_list_cell_struct * cdr; } scm_t_list_cell; + +typedef struct scm_t_double_cell +{ + scm_t_bits word_0; + scm_t_bits word_1; + scm_t_bits word_2; + scm_t_bits word_3; +} scm_t_double_cell; + + int scm_gc_marked_p (SCM obj) { |