diff --git a/libao.rkt b/libao.rkt index 86f1d41..0f6507d 100644 --- a/libao.rkt +++ b/libao.rkt @@ -4,6 +4,7 @@ (prefix-in fin: finalizer) (prefix-in ffi: "libao-async-ffi.rkt") ffi/unsafe + ffi/unsafe/custodian data/queue "private/utils.rkt" ) @@ -37,7 +38,23 @@ (ao_initialize) -(define libao-plumber-flus-handle +(define (ao-finalizer devices) + (hash-for-each devices + (lambda (handle-num device) + (ao-close handle-num))) + (set! devices (make-hash)) + (ao_shutdown) + ) + +(define custodian-finalizer + (register-custodian-shutdown devices + (λ (devices) + (ao-finalizer devices)) + #:at-exit? #t) + ) + +#| +(define libao-plumber-flush-handle (plumber-add-flush! (current-plumber) (lambda (my-handle) (hash-for-each devices @@ -49,6 +66,9 @@ (ao_shutdown) (plumber-flush-handle-remove! my-handle) ))) +|# + +