}
/* PLTSCHEME: notification callback for starting/ending a GC */
-void (*GC_collect_start_callback)(void) = NULL;
-void (*GC_collect_end_callback)(void) = NULL;
+GC_collect_start_callback_Proc GC_collect_start_callback = NULL;
+GC_collect_end_callback_Proc GC_collect_end_callback = NULL;
+GC_collect_start_callback_Proc GC_set_collect_start_callback(GC_collect_start_callback_Proc func) {
+ GC_collect_start_callback_Proc old;
+ old = GC_collect_start_callback;
+ GC_collect_start_callback = func;
+ return old;
+}
+GC_collect_end_callback_Proc GC_set_collect_end_callback(GC_collect_end_callback_Proc func) {
+ GC_collect_end_callback_Proc old;
+ old = GC_collect_end_callback;
+ GC_collect_end_callback = func;
+ return old;
+}
/*
* Stop the world garbage collection. Assumes lock held, signals disabled.
#if defined(GC_REDIRECT_TO_LOCAL) && !defined(GC_LOCAL_ALLOC_H)
# include "gc_local_alloc.h"
#endif
+typedef void (*GC_collect_start_callback_Proc)(void);
+typedef void (*GC_collect_end_callback_Proc)(void);
/* PLTSCHEME: */
GC_API void (*GC_custom_finalize)(void);
GC_API void (*GC_push_last_roots)(void);
GC_API void (*GC_push_last_roots_again)(void);
-GC_API void (*GC_collect_start_callback)(void);
-GC_API void (*GC_collect_end_callback)(void);
+GC_API GC_collect_start_callback_Proc GC_set_collect_start_callback(GC_collect_start_callback_Proc);
+GC_API GC_collect_end_callback_Proc GC_set_collect_end_callback(GC_collect_end_callback_Proc);
GC_API void (*GC_out_of_memory)(void);
GC_API int GC_did_mark_stack_overflow(void);
GC_API void GC_mark_from_mark_stack(void);