110 |
|
|
111 |
scm_i_clear_mark_space (); |
scm_i_clear_mark_space (); |
112 |
|
|
|
#ifndef USE_THREADS |
|
|
|
|
|
/* Mark objects on the C stack. */ |
|
|
SCM_FLUSH_REGISTER_WINDOWS; |
|
|
/* This assumes that all registers are saved into the jmp_buf */ |
|
|
setjmp (scm_save_regs_gc_mark); |
|
|
scm_mark_locations ((SCM_STACKITEM *) scm_save_regs_gc_mark, |
|
|
( (size_t) (sizeof (SCM_STACKITEM) - 1 + |
|
|
sizeof scm_save_regs_gc_mark) |
|
|
/ sizeof (SCM_STACKITEM))); |
|
|
|
|
|
{ |
|
|
unsigned long stack_len = scm_stack_size (scm_stack_base); |
|
|
#ifdef SCM_STACK_GROWS_UP |
|
|
scm_mark_locations (scm_stack_base, stack_len); |
|
|
#else |
|
|
scm_mark_locations (scm_stack_base - stack_len, stack_len); |
|
|
#endif |
|
|
} |
|
|
SCM_MARK_BACKING_STORE(); |
|
|
|
|
|
#else /* USE_THREADS */ |
|
|
|
|
113 |
/* Mark every thread's stack and registers */ |
/* Mark every thread's stack and registers */ |
114 |
scm_threads_mark_stacks (); |
scm_threads_mark_stacks (); |
115 |
|
|
|
#endif /* USE_THREADS */ |
|
|
|
|
116 |
j = SCM_NUM_PROTECTS; |
j = SCM_NUM_PROTECTS; |
117 |
while (j--) |
while (j--) |
118 |
scm_gc_mark (scm_sys_protects[j]); |
scm_gc_mark (scm_sys_protects[j]); |
136 |
* in different phases of GC |
* in different phases of GC |
137 |
*/ |
*/ |
138 |
scm_mark_subr_table (); |
scm_mark_subr_table (); |
|
|
|
|
|
|
|
#ifndef USE_THREADS |
|
|
scm_gc_mark (scm_root->handle); |
|
|
#endif |
|
139 |
} |
} |
140 |
|
|
141 |
/* {Mark/Sweep} |
/* {Mark/Sweep} |