summaryrefslogtreecommitdiff
path: root/paste/registry.py
diff options
context:
space:
mode:
authorbbangert <devnull@localhost>2007-10-03 18:44:53 +0000
committerbbangert <devnull@localhost>2007-10-03 18:44:53 +0000
commit129b7e35c40d58f8d3632faa1dac9c99f0a08776 (patch)
tree374a26a3db1d03abc5d66a44272bf7d21d5e9e34 /paste/registry.py
parentca095f39ad9e84ef5cec0d56cd5972ceaf1c6f8e (diff)
downloadpaste-129b7e35c40d58f8d3632faa1dac9c99f0a08776.tar.gz
* Fixed memory leak with ``paste.registry`` not properly removing
all references to registered objects should register be called multiple times during a single context for a StackedObjectProxy.
Diffstat (limited to 'paste/registry.py')
-rw-r--r--paste/registry.py15
1 files changed, 9 insertions, 6 deletions
diff --git a/paste/registry.py b/paste/registry.py
index 0bf56dc..a496fae 100644
--- a/paste/registry.py
+++ b/paste/registry.py
@@ -292,7 +292,7 @@ class Registry(object):
"""Register an object with a StackedObjectProxy"""
stacked._push_object(obj)
myreglist = self.reglist[-1]
- myreglist[id(stacked)] = (stacked, obj)
+ myreglist.setdefault(id(stacked), []).append((stacked, obj))
def replace(self, stacked, obj):
"""Replace the object referenced by a StackedObjectProxy with a
@@ -303,15 +303,18 @@ class Registry(object):
"""
myreglist = self.reglist[-1]
if id(stacked) in myreglist:
- stacked._pop_object(myreglist[id(stacked)][1])
- self.register(stacked, obj)
+ for stacked, obj in myreglist[id(stacked)]:
+ stacked._pop_object(obj)
+ del myreglist[id(stacked)]
+ stacked._push_object(obj)
+ myreglist.setdefault(id(stacked), []).append((stacked, obj))
def cleanup(self):
"""Remove all objects from all StackedObjectProxy instances that
were tracked at this Registry context"""
- for id, val in self.reglist[-1].iteritems():
- stacked, obj = val
- stacked._pop_object(obj)
+ for id, lst in self.reglist[-1].iteritems():
+ for stacked, obj in lst:
+ stacked._pop_object(obj)
self.reglist.pop()
class RegistryManager(object):