summaryrefslogtreecommitdiff
path: root/libguile/gc-card.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/gc-card.c')
-rw-r--r--libguile/gc-card.c16
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)
{