diff --git a/direct/src/distributed/CRCache.py b/direct/src/distributed/CRCache.py index e49d66f962..9117d5586d 100644 --- a/direct/src/distributed/CRCache.py +++ b/direct/src/distributed/CRCache.py @@ -32,6 +32,9 @@ class CRCache: distObj.deleteOrDelay() if distObj.getDelayDeleteCount() != 0: delayDeleted.append(distObj) + if distObj.getDelayDeleteCount() <= 0: + # make sure we're not leaking + distObj.detectLeaks() # now that all objects have had a chance to delete, are there any objects left # that are still delayDeleted? delayDeleteLeaks = [] @@ -76,6 +79,9 @@ class CRCache: del(self.dict[oldestDistObj.getDoId()]) # and delete it oldestDistObj.deleteOrDelay() + if oldestDistObj.getDelayDeleteCount() <= 0: + # make sure we're not leaking + oldestDistObj.detectLeaks() # Make sure that the fifo and the dictionary are sane assert len(self.dict) == len(self.fifo) @@ -109,6 +115,9 @@ class CRCache: self.fifo.remove(distObj) # and delete it distObj.deleteOrDelay() + if distObj.getDelayDeleteCount() <= 0: + # make sure we're not leaking + distObj.detectLeaks() def checkCache(self): # For debugging; this verifies that the cache is sensible and diff --git a/direct/src/distributed/ClientRepositoryBase.py b/direct/src/distributed/ClientRepositoryBase.py index 9ac9671c29..a8a5740a51 100644 --- a/direct/src/distributed/ClientRepositoryBase.py +++ b/direct/src/distributed/ClientRepositoryBase.py @@ -490,12 +490,14 @@ class ClientRepositoryBase(ConnectionRepository): # object; this way we don't clutter up the caches with # trivial objects that don't benefit from caching. # also don't try to cache an object that is delayDeleted + cached = False if distObj.getCacheable() and distObj.getDelayDeleteCount() <= 0: cached = cache.cache(distObj) - if not cached: - distObj.deleteOrDelay() - else: + if not cached: distObj.deleteOrDelay() + if distObj.getDelayDeleteCount() <= 0: + # make sure we're not leaking + distObj.detectLeaks() elif self.deferredDoIds.has_key(doId): # The object had been deferred. Great; we don't even have