A better system is required in the code to project objects from garbage collection for internal code windows. Currently, this is managed by calls to save() and discard() in the windows where protection is required. Because this is a global protection mechanism, this can lead to memory leaks. There are many places in the code where save() operations are performed, and exceptions are raised without calling discard() on the object.
The 4.0 base has an implementation of PortableObject which creates chained pointer values hung off of the current activity for protecting storage. These automatically dechain themselves when the instance goes out of scope.
NOTE: In order for this to work, the existing exception handling mechanism based on setjmp()/longjmp() will need to be replaced with try/catch mechanism. That is a different ToDo item.
Anonymous
Logged In: YES
user_id=1125291
Originator: YES
Committed revision 1357.