summaryrefslogtreecommitdiff
path: root/libguile/gc-card.c
diff options
context:
space:
mode:
authorHan-Wen Nienhuys <hanwen@lilypond.org>2002-08-08 19:47:31 +0000
committerHan-Wen Nienhuys <hanwen@lilypond.org>2002-08-08 19:47:31 +0000
commiteab1b25970c21df7da67bd8f48290a1a1e1bf3d7 (patch)
tree5e1a7d34544a58ef5ddce7f51762b60189325ff6 /libguile/gc-card.c
parent00706edc1de5c13bc0552eedf8eec9a5a7ed8802 (diff)
downloadguile-eab1b25970c21df7da67bd8f48290a1a1e1bf3d7.tar.gz
* gc.h: add scm_debug_cells_gc_interval to public interface
* gc-card.c ("sweep_card"): set scm_gc_running while sweeping. * gc.c (scm_i_expensive_validation_check): separate expensive validation checks from cheap ones.
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)
{