diff --git a/direct/src/showbase/ContainerLeakDetector.py b/direct/src/showbase/ContainerLeakDetector.py index 12f310a412..29c9734344 100755 --- a/direct/src/showbase/ContainerLeakDetector.py +++ b/direct/src/showbase/ContainerLeakDetector.py @@ -39,7 +39,6 @@ class Indirection: TODO: store string components that are duplicates of strings in the actual system so that Python will keep one copy and reduce memory usage """ - def __init__(self, evalStr=None, dictKey=NoDictKey): # if this is a dictionary lookup, pass dictKey instead of evalStr self.evalStr = evalStr @@ -196,7 +195,7 @@ class ObjectRef: return None return container - def getContainer(self): + def getContainerGen(self): # try to get a handle on the container by eval'ing and looking things # up in dictionaries, depending on the type of each indirection #import pdb;pdb.set_trace() @@ -225,7 +224,7 @@ class ObjectRef: # TODO: check that this is still the object we originally pointed to yield self._getContainerByEval(evalStr, curObj=curObj) - def getNameGen(self): + def getEvalStrGen(self): str = '' prevIndirection = None curIndirection = None @@ -253,7 +252,7 @@ class ObjectRef: yield str def __repr__(self): - for result in self.getNameGen(): + for result in self.getEvalStrGen(): pass return result @@ -357,9 +356,9 @@ class FindContainers(Job): # if this container is new, or the objRef repr is shorter than what we already have, # put it in the table if contId in self._id2ref: - for existingRepr in self._id2ref[contId].getNameGen(): + for existingRepr in self._id2ref[contId].getEvalStrGen(): yield None - for newRepr in objRef.getNameGen(): + for newRepr in objRef.getEvalStrGen(): yield None if contId not in self._id2ref or len(newRepr) < len(existingRepr): if contId in self._id2ref: @@ -454,10 +453,10 @@ class FindContainers(Job): curObjRef = containerRef try: - for curObj in curObjRef.getContainer(): + for curObj in curObjRef.getContainerGen(): yield None except: - self.notify.debug('lost current container, ref.getContainer() failed') + self.notify.debug('lost current container, ref.getContainerGen() failed') # that container is gone, try again curObjRef = None continue @@ -478,7 +477,7 @@ class FindContainers(Job): # prevent cycles in the references (i.e. base.loader.base) if not parentObjRef.goesThrough(child): objRef = ObjectRef(Indirection(evalStr='.__dict__'), - id(child), parentObjRef) + id(child), parentObjRef) yield None if hasLength: for i in self._addContainerGen(child, objRef): @@ -515,10 +514,10 @@ class FindContainers(Job): if not parentObjRef.goesThrough(curObj[key]): if curObj is __builtin__.__dict__: objRef = ObjectRef(Indirection(evalStr='%s' % key), - id(curObj[key])) + id(curObj[key])) else: objRef = ObjectRef(Indirection(dictKey=key), - id(curObj[key]), parentObjRef) + id(curObj[key]), parentObjRef) yield None if hasLength: for i in self._addContainerGen(attr, objRef): @@ -563,7 +562,7 @@ class FindContainers(Job): # prevent cycles in the references (i.e. base.loader.base) if not parentObjRef.goesThrough(curObj[index]): objRef = ObjectRef(Indirection(evalStr='[%s]' % index), - id(curObj[index]), parentObjRef) + id(curObj[index]), parentObjRef) yield None if hasLength: for i in self._addContainerGen(attr, objRef): @@ -759,7 +758,7 @@ class PruneObjectRefs(Job): for id in ids: yield None try: - for container in _id2baseStartRef[id].getContainer(): + for container in _id2baseStartRef[id].getContainerGen(): yield None except: # reference is invalid, remove it @@ -769,7 +768,7 @@ class PruneObjectRefs(Job): for id in ids: yield None try: - for container in _id2discoveredStartRef[id].getContainer(): + for container in _id2discoveredStartRef[id].getContainerGen(): yield None except: # reference is invalid, remove it @@ -858,13 +857,13 @@ class ContainerLeakDetector(Job): def getContainerByIdGen(self, id): # return a generator to look up a container - return self._id2ref[id].getContainer() + return self._id2ref[id].getContainerGen() def getContainerById(self, id): - for result in self._id2ref[id].getContainer(): + for result in self._id2ref[id].getContainerGen(): pass return result def getContainerNameByIdGen(self, id): - return self._id2ref[id].getNameGen() + return self._id2ref[id].getEvalStrGen() def getContainerNameById(self, id): if id in self._id2ref: return repr(self._id2ref[id])