diff --git a/gc.c b/gc.c index 4a96171e..848df0e5 100644 --- a/gc.c +++ b/gc.c @@ -2534,14 +2534,6 @@ void gc_collector() ck_pr_cas_int(&gc_stage, STAGE_SWEEPING, STAGE_RESTING); } -void gc_force(void) -{ - /* try to force the collector to run */ - ck_pr_cas_int(&gc_stage, STAGE_RESTING, STAGE_FORCING); - /* if the collector thread was idle, then begin collecting */ - ck_pr_cas_int(&gc_stage, STAGE_FORCING, STAGE_CLEAR_OR_MARKING); -} - void *collector_main(void *arg) { int stage; diff --git a/include/cyclone/runtime.h b/include/cyclone/runtime.h index 860c2dbb..432be667 100644 --- a/include/cyclone/runtime.h +++ b/include/cyclone/runtime.h @@ -52,11 +52,6 @@ void GC(void *, closure, object *, int); */ void gc_init_heap(long heap_size); -/** - * \ingroup gc_force - */ -void gc_force(void); - /** * \defgroup prim Primitives * @brief Built-in Scheme functions provided by the runtime library diff --git a/include/cyclone/types.h b/include/cyclone/types.h index 32abdaee..c37ae282 100644 --- a/include/cyclone/types.h +++ b/include/cyclone/types.h @@ -264,7 +264,7 @@ typedef enum { STATUS_ASYNC, STATUS_SYNC1, STATUS_SYNC2 /** Stages of the Major GC's collector thread */ typedef enum { STAGE_CLEAR_OR_MARKING, STAGE_TRACING //, STAGE_REF_PROCESSING - , STAGE_SWEEPING, STAGE_RESTING, STAGE_FORCING + , STAGE_SWEEPING, STAGE_RESTING } gc_stage_type; // Constant colors are defined here. @@ -377,7 +377,6 @@ struct gc_thread_data_t { /* GC prototypes */ void gc_initialize(void); -void gc_force(void); void gc_add_new_unrunning_mutator(gc_thread_data * thd); void gc_add_mutator(gc_thread_data * thd); void gc_remove_mutator(gc_thread_data * thd); diff --git a/runtime.c b/runtime.c index 2af2ce43..d0404fb0 100644 --- a/runtime.c +++ b/runtime.c @@ -7181,7 +7181,7 @@ void Cyc_exit_thread(void *data, object _, int argc, object * args) gc_remove_mutator(thd); ck_pr_cas_int((int *)&(thd->thread_state), CYC_THREAD_STATE_RUNNABLE, CYC_THREAD_STATE_TERMINATED); - gc_force(); + gc_start_major_collection(thd); pthread_exit(NULL); }