Then how? Suppose I have (struct obj (file)) (define my-obj (obj (open-output-file "out.dat")))
What I have to write to close the file, when my-obj will be GC'ed? I can write (define will (make-will-executor)) (will-register will my-obj (lambda (x) (close-output-port (obj-file x)))) But as far as I understand, it will not be called until `will-execute' or `will-try-execute' will be manually called? Then how to call will-try-execute when GC is collecting my-obj? Sat, 2 Aug 2014 11:57:32 +0100 от Matthew Flatt <[email protected]>: >No, use the safe "will executors" API, instead. > >The unsafe finalizer API is for low-level, atomic finalization. Closing a port >can flush buffers and more, and it's not a good idea to do that in an unsafe >atomic context. > >> On Aug 2, 2014, at 11:12 AM, Roman Klochkov < [email protected] > wrote: >> >> I have a structure, that has a filestream inside it. File have to be cosed, >> when the structure is not used anymore (so gargbage collected). >> >> Is the best way to do >> (require ffi/unsafe) >> (register-finalizer my-obj >> (lambda (x) (close-output-port (obj-file x)))) >> >> ? >> >> It seems doing right thing, but why `ffi/unsafe'? Is it OK, when my program >> actually doesn't use FFI? >> >> >> -- >> Roman Klochkov >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users -- Roman Klochkov
____________________ Racket Users list: http://lists.racket-lang.org/users

