diff options
author | bbangert <devnull@localhost> | 2007-10-03 18:44:53 +0000 |
---|---|---|
committer | bbangert <devnull@localhost> | 2007-10-03 18:44:53 +0000 |
commit | 129b7e35c40d58f8d3632faa1dac9c99f0a08776 (patch) | |
tree | 374a26a3db1d03abc5d66a44272bf7d21d5e9e34 /paste/registry.py | |
parent | ca095f39ad9e84ef5cec0d56cd5972ceaf1c6f8e (diff) | |
download | paste-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.py | 15 |
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): |