Thanks Vivien, I had not considered dynamic-wind. I'll look into that a bit more.
Cheers, Tim On Sat, Sep 4, 2021 at 8:35 AM Vivien Kraus <viv...@planete-kraus.eu> wrote: > Hello, > > Le samedi 04 septembre 2021 à 07:41 -0500, Tim Meehan a écrit : > > I'd rather not compile anything in C, and just use the tools in Guile to > > interact with libgps. Is there a way to get Guile's garbage collector to > > call "gps_close" on the opaque structure returned by "gps_open"? > I think it would be best to do it yourself. Maybe the garbage collector > will not run immediately (if at all), and if each creation uses "precious" > resources (such as file descriptors), you might run > into a shortage before the garbage collector is triggered. This is not > considered by people writing the C API of course, because they assume you > would close the thing as soon as possible. (Also, if > calling the close function is mandatory, for instance to run code that’s > not just freeing resources, and the garbage collector does not have a > chance to run, then it’s another problem. However, I > doubt your library does something like that). > > If you want to avoid the problem, you should explicitely bind and call the > gps-close function and not rely on the garbage collector to do it for you. > You can use dynamic-wind to open and close > resources as needed. > > That being said, make-pointer (from (system foreign-library)) is probably > what you are expecting. It should work with gps_close. > > Best regards, > > Vivien > >