I am getting an AV in __IntfClear in System.pas .
I am assuming this means something is nil but the very same code works perfectly in some cases whereas I get exception in others. All the classes inherit from the same base class and they have essentially the same code, i.e. the same methods are overridden in the same way etc. you get the idea.
So I am wondering if anyone has an idea of what may be causing this especially because the functionality isn’t affected, only the destroying.
What’s even more interesting is this: say that there are 5 services affected by this problem. 3 of these will not have the issue if one of the other 2 (which seem to consistently have the issue) have the issue.
Otherwise, any of the 5 will have that issue.
I have no idea what’s happening.
An av on _intfclear means the reference counted object has been freed already.
These issues can be very hard to find - a code smell for this is if you manually call _Addref or _Release anywhere.
I would suggest that you keep the lifetime of references as short as possible - when you no longer need a reference, nil it out. Do this religeously.
Also, when working with reference counted objects that the current class or method doesn’t own, take a local reference and work on that. e.g
LMyService : IMyService;
LMyService := MyExternalService; //attempt to extend the lifetime of the object
//it may already be nil so still need to check
if LMyService <> nil then
Doing this ensures the rug isn’t pulled out from under you.