mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-03 18:50:19 +02:00
Add gc_deactivate / gc_reactivate
Guile needs this.
This commit is contained in:
parent
675d8d649a
commit
6a554e5dd7
5 changed files with 31 additions and 2 deletions
|
@ -53,12 +53,14 @@ GC_API_ void gc_heap_set_extern_space(struct gc_heap *heap,
|
||||||
GC_API_ struct gc_mutator* gc_init_for_thread(struct gc_stack_addr base,
|
GC_API_ struct gc_mutator* gc_init_for_thread(struct gc_stack_addr base,
|
||||||
struct gc_heap *heap);
|
struct gc_heap *heap);
|
||||||
GC_API_ void gc_finish_for_thread(struct gc_mutator *mut);
|
GC_API_ void gc_finish_for_thread(struct gc_mutator *mut);
|
||||||
|
GC_API_ void gc_deactivate(struct gc_mutator *mut);
|
||||||
|
GC_API_ void gc_reactivate(struct gc_mutator *mut);
|
||||||
GC_API_ void* gc_deactivate_for_call(struct gc_mutator *mut,
|
GC_API_ void* gc_deactivate_for_call(struct gc_mutator *mut,
|
||||||
void* (*f)(struct gc_mutator*, void*),
|
void* (*f)(struct gc_mutator*, void*),
|
||||||
void *data) GC_NEVER_INLINE;
|
void *data);
|
||||||
GC_API_ void* gc_reactivate_for_call(struct gc_mutator *mut,
|
GC_API_ void* gc_reactivate_for_call(struct gc_mutator *mut,
|
||||||
void* (*f)(struct gc_mutator*, void*),
|
void* (*f)(struct gc_mutator*, void*),
|
||||||
void *data) GC_NEVER_INLINE;
|
void *data);
|
||||||
|
|
||||||
GC_API_ void gc_collect(struct gc_mutator *mut,
|
GC_API_ void gc_collect(struct gc_mutator *mut,
|
||||||
enum gc_collection_kind requested_kind);
|
enum gc_collection_kind requested_kind);
|
||||||
|
|
|
@ -668,6 +668,9 @@ static void* call_with_mutator (void *p) {
|
||||||
return data->proc(data->mutator, data->data);
|
return data->proc(data->mutator, data->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gc_deactivate(struct gc_mutator *mut) {};
|
||||||
|
void gc_reactivate(struct gc_mutator *mut) {};
|
||||||
|
|
||||||
void* gc_deactivate_for_call(struct gc_mutator *mut,
|
void* gc_deactivate_for_call(struct gc_mutator *mut,
|
||||||
void* (*f)(struct gc_mutator *, void*),
|
void* (*f)(struct gc_mutator *, void*),
|
||||||
void *data) {
|
void *data) {
|
||||||
|
|
10
src/mmc.c
10
src/mmc.c
|
@ -1297,6 +1297,16 @@ reactivate_mutator(struct gc_heap *heap, struct gc_mutator *mut) {
|
||||||
heap_unlock(heap);
|
heap_unlock(heap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gc_deactivate(struct gc_mutator *mut) {
|
||||||
|
GC_ASSERT(mut->active);
|
||||||
|
deactivate_mutator(mutator_heap(mut), mut);
|
||||||
|
}
|
||||||
|
|
||||||
|
void gc_reactivate(struct gc_mutator *mut) {
|
||||||
|
GC_ASSERT(!mut->active);
|
||||||
|
reactivate_mutator(mutator_heap(mut), mut);
|
||||||
|
}
|
||||||
|
|
||||||
void*
|
void*
|
||||||
gc_deactivate_for_call(struct gc_mutator *mut,
|
gc_deactivate_for_call(struct gc_mutator *mut,
|
||||||
void* (*f)(struct gc_mutator*, void*),
|
void* (*f)(struct gc_mutator*, void*),
|
||||||
|
|
10
src/pcc.c
10
src/pcc.c
|
@ -1383,6 +1383,16 @@ static void reactivate_mutator(struct gc_heap *heap, struct gc_mutator *mut) {
|
||||||
heap_unlock(heap);
|
heap_unlock(heap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gc_deactivate(struct gc_mutator *mut) {
|
||||||
|
GC_ASSERT(mut->active);
|
||||||
|
deactivate_mutator(mutator_heap(mut), mut);
|
||||||
|
}
|
||||||
|
|
||||||
|
void gc_reactivate(struct gc_mutator *mut) {
|
||||||
|
GC_ASSERT(!mut->active);
|
||||||
|
reactivate_mutator(mutator_heap(mut), mut);
|
||||||
|
}
|
||||||
|
|
||||||
void* gc_deactivate_for_call(struct gc_mutator *mut,
|
void* gc_deactivate_for_call(struct gc_mutator *mut,
|
||||||
void* (*f)(struct gc_mutator*, void*),
|
void* (*f)(struct gc_mutator*, void*),
|
||||||
void *data) {
|
void *data) {
|
||||||
|
|
|
@ -763,6 +763,10 @@ struct gc_mutator* gc_init_for_thread(struct gc_stack_addr base,
|
||||||
void gc_finish_for_thread(struct gc_mutator *space) {
|
void gc_finish_for_thread(struct gc_mutator *space) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gc_deactivate(struct gc_mutator *mut) {}
|
||||||
|
|
||||||
|
void gc_reactivate(struct gc_mutator *mut) {}
|
||||||
|
|
||||||
void* gc_deactivate_for_call(struct gc_mutator *mut,
|
void* gc_deactivate_for_call(struct gc_mutator *mut,
|
||||||
void* (*f)(struct gc_mutator *, void*),
|
void* (*f)(struct gc_mutator *, void*),
|
||||||
void *data) {
|
void *data) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue