1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-29 22:40:34 +02:00

Allow embedder to request a major GC

This commit is contained in:
Andy Wingo 2023-10-18 15:18:35 +02:00
parent 0c7bdacc51
commit cfc8c8a9b8
9 changed files with 115 additions and 78 deletions

View file

@ -125,8 +125,22 @@ void* gc_allocate_pointerless(struct gc_mutator *mut,
return GC_malloc_atomic(size);
}
void gc_collect(struct gc_mutator *mut) {
GC_gcollect();
void gc_collect(struct gc_mutator *mut,
enum gc_collection_kind requested_kind) {
switch (requested_kind) {
case GC_COLLECTION_MINOR:
GC_collect_a_little();
break;
case GC_COLLECTION_ANY:
case GC_COLLECTION_MAJOR:
GC_gcollect();
break;
case GC_COLLECTION_COMPACTING:
GC_gcollect_and_unmap();
break;
default:
GC_CRASH();
}
}
void gc_write_barrier_extern(struct gc_ref obj, size_t obj_size,
@ -330,9 +344,7 @@ gc_heap_pending_ephemerons(struct gc_heap *heap) {
static void on_collection_event(GC_EventType event) {
switch (event) {
case GC_EVENT_START: {
int is_minor = 0;
int is_compacting = 0;
HEAP_EVENT(prepare_gc, is_minor, is_compacting);
HEAP_EVENT(prepare_gc, GC_COLLECTION_MAJOR);
HEAP_EVENT(requesting_stop);
HEAP_EVENT(waiting_for_stop);
break;