diff --git a/c/prim.c b/c/prim.c index 644b3a557e..5b3955d89e 100644 --- a/c/prim.c +++ b/c/prim.c @@ -180,6 +180,7 @@ void S_prim_init() { Sforeign_symbol("(cs)enable_object_backreferences", (void *)S_enable_object_backreferences); Sforeign_symbol("(cs)set_enable_object_backreferences", (void *)S_set_enable_object_backreferences); Sforeign_symbol("(cs)object_backreferences", (void *)S_object_backreferences); + Sforeign_symbol("(cs)fire_collector", (void *)S_fire_collector); } static void s_instantiate_code_object() { diff --git a/s/7.ss b/s/7.ss index 18473ca4e5..f514763ab4 100644 --- a/s/7.ss +++ b/s/7.ss @@ -769,6 +769,11 @@ ($oops who "invalid target generation ~s for generation ~s" gtarget g)) (collect2 g (if (eq? gtarget 'static) (constant static-generation) gtarget))]))) +(set! collect-rendezvous + (let ([fire-collector (foreign-procedure "(cs)fire_collector" () void)]) + (lambda () + (fire-collector)))) + (set! keyboard-interrupt-handler ($make-thread-parameter (lambda () diff --git a/s/primdata.ss b/s/primdata.ss index 7acb135f0a..3ebe6e1a61 100644 --- a/s/primdata.ss +++ b/s/primdata.ss @@ -1201,6 +1201,7 @@ (clear-input-port [sig [() (input-port) -> (void)]] [flags true]) (clear-output-port [sig [() (output-port) -> (void)]] [flags true]) (collect [sig [() (sub-ufixnum) (sub-ufixnum ptr) -> (void)]] [flags true]) + (collect-rendezvous [sig [() -> (void)]] [flags]) (collections [sig [() -> (uint)]] [flags unrestricted alloc]) (compile [sig [(sub-ptr) (sub-ptr environment) -> (ptr ...)]] [flags]) (compile-file [sig [(pathname) (pathname pathname) (pathname pathname sub-symbol) -> (void)]] [flags true])