On this page:

5.6 Custodian Shutdown Registration

The ffi/unsafe/custodian library provides utilities for registering shutdown callbacks with custodians.


(register-custodian-shutdown v    
  #:at-exit? at-exit?    
  #:weak? weak?])  cpointer?
  v : any/c
  callback : (any/c . -> . any)
  custodian : custodian? = (current-custodian)
  at-exit? : any/c = #f
  weak? : any/c = #f
Registers callback to be applied (in atomic mode and an unspecified Racket thread) to v when custodian is shutdown. The result is a pointer that can be supplied to unregister-custodian-shutdown to remove the registration.

If at-exit? is true, then callback is applied when Racket exits, even if the custodian is not explicitly shut down.

If weak? is true, then callback may not be called if v is determined to be unreachable during garbage collection. The value v is always weakly held by the custodian, even if weak? is #f; see scheme_add_managed for more information.

Normally, weak? should be false. To trigger actions based on finalization or custodian shutdown—whichever happens first—leave weak? as #f and have a finalizer cancel the shutdown action via unregister-custodian-shutdown. Otherwise, a not-yet-run finalizer may remain pending after the custodian is shutdown.


(unregister-custodian-shutdown v    
  registration)  void?
  v : any/c
  registration : _cpointer
Cancels a custodian-shutdown registration, where registration is a previous result from register-custodian-shutdown applied to v.