Adds a function to perform a special action during garbage collection.
add-special-free-action function => function-list
A function designator for a function of one argument.
A list of the functions currently called to perform special actions, including the one just added.
When some objects are garbage collected, you may require a "special action" to be performed as well. The function
add-special-free-action adds the function function to perform the special action. Note that the function is applied to all objects flagged for special-free-action, so the function function should check for the object's type, so that it only affects relevant objects. Also, it should be fast when called with other objects.
When function is called, the object is still alive but is no longer flagged for special free action. Normally, the object will be collected on the next garbage collection cycle, but you can also store it somewhere which will prevent this. It may even be passed to flag-special-free-action again.
You should not rely on special free actions for objects with a high turn-over rate (that is, where many such objects are allocated and they become garbage fairly quickly), because some may not get collected early enough. Either ensure that the cleanup is called elsewhere, or arrange for a GC to happen.
(defun free-my-app (object) (when (my-app-p object) (free-some-external-resources object))) (add-special-free-action 'free-my-app)
LispWorks® User Guide and Reference Manual - 01 Dec 2021 19:30:35