1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-09 15:10:29 +02:00

Add gc_collect(mutator) API

This commit is contained in:
Andy Wingo 2023-01-22 21:04:20 +01:00
parent 1b3bc2f3b5
commit 44f37a373c
4 changed files with 11 additions and 1 deletions

2
bdw.c
View file

@ -116,7 +116,7 @@ void* gc_allocate_pointerless(struct gc_mutator *mut,
return GC_malloc_atomic(size);
}
static inline void collect(struct gc_mutator *mut) {
void gc_collect(struct gc_mutator *mut) {
GC_gcollect();
}

View file

@ -57,6 +57,8 @@ GC_API_ void* gc_call_without_gc(struct gc_mutator *mut, void* (*f)(void*),
void *data) GC_NEVER_INLINE;
GC_API_ void gc_print_stats(struct gc_heap *heap);
GC_API_ void gc_collect(struct gc_mutator *mut);
static inline void gc_clear_fresh_allocation(struct gc_ref obj,
size_t size) GC_ALWAYS_INLINE;
static inline void gc_clear_fresh_allocation(struct gc_ref obj,

4
semi.c
View file

@ -171,6 +171,10 @@ static void collect(struct gc_mutator *mut) {
// fprintf(stderr, "%zd bytes copied\n", (space->size>>1)-(space->limit-space->hp));
}
void gc_collect(struct gc_mutator *mut) {
collect(mut);
}
static void collect_for_alloc(struct gc_mutator *mut, size_t bytes) {
collect(mut);
struct semi_space *space = mutator_semi_space(mut);

View file

@ -1992,6 +1992,10 @@ static void trigger_collection(struct gc_mutator *mut) {
heap_unlock(heap);
}
void gc_collect(struct gc_mutator *mut) {
trigger_collection(mut);
}
void* gc_allocate_large(struct gc_mutator *mut, size_t size) {
struct gc_heap *heap = mutator_heap(mut);
struct large_object_space *space = heap_large_object_space(heap);