Hi folks!
I have the follwoing situation:
A foreign function call returns a pointer to a "table" object. This is an opaque object that can only be manipulated by the APIs provided by the foreign library. To avoid memory leaks the "table" objects should by destroyed by a call to "destroy_table" function if they are not used anymore.
I have wrapped the "table" object and its corresponding API functions in a CLOS object with appropriate methods. Instances of this CLOS object will be returned by function calls on the Lisp side.
The CLOS instance contains a reference to a C "table" object (allocated on C-heap by foreign library). If a caller in a Lisp program ignores the returned "table" object, it should be garbage collected as expected.
My questions are now: 1) Will it be really garbage collected? 2) If the answer is in affirmative, is it garbage collected correctly (no potential memory leaks)?
Please note that the C API offers as mentioned above its own dedicated function for that purpose.
What would be a correct solution to avoid memory leaks in this situation? Using a finalizer seems to be a possible way to go. But I'm not sure how this can be done by just using the finalizer parameters "object" and "function" where "function" can't reliablely access "object" (cf. documentation of finalizer in "trivial-garbage" package)!!
Any help and feedback is very much appreciated!
Regards Nik