diff options
Diffstat (limited to 'libguile/gc-mark.c')
-rw-r--r-- | libguile/gc-mark.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/libguile/gc-mark.c b/libguile/gc-mark.c index 466874ad2..d7414d648 100644 --- a/libguile/gc-mark.c +++ b/libguile/gc-mark.c @@ -83,9 +83,6 @@ extern unsigned long * __libc_ia64_register_backing_store_base; #include <unistd.h> #endif - - - #ifdef __ia64__ # define SCM_MARK_BACKING_STORE() do { \ ucontext_t ctx; \ @@ -101,6 +98,7 @@ extern unsigned long * __libc_ia64_register_backing_store_base; # define SCM_MARK_BACKING_STORE() #endif + /* Entry point for this file. */ @@ -108,10 +106,10 @@ void scm_mark_all (void) { long j; - + scm_i_clear_mark_space (); - + #ifndef USE_THREADS /* Mark objects on the C stack. */ @@ -157,12 +155,14 @@ scm_mark_all (void) } } } + /* FIXME: we should have a means to register C functions to be run * in different phases of GC */ scm_mark_subr_table (); + #ifndef USE_THREADS scm_gc_mark (scm_root->handle); #endif @@ -171,7 +171,6 @@ scm_mark_all (void) /* {Mark/Sweep} */ - /* Mark an object precisely, then recurse. */ @@ -182,7 +181,9 @@ scm_gc_mark (SCM ptr) return ; if (SCM_GC_MARK_P (ptr)) - return; + { + return; + } SCM_SET_GC_MARK (ptr); scm_gc_mark_dependencies (ptr); @@ -475,9 +476,12 @@ gc_mark_loop: } if (SCM_GC_MARK_P (ptr)) + { return; - + } + SCM_SET_GC_MARK (ptr); + goto scm_mark_dependencies_again; } @@ -485,6 +489,7 @@ gc_mark_loop: + /* Mark a region conservatively */ void scm_mark_locations (SCM_STACKITEM x[], unsigned long n) @@ -570,4 +575,3 @@ scm_gc_init_mark(void) #endif } - |