Fix memory reference bugs.

This commit is contained in:
Lance Stout 2011-09-01 00:50:45 -07:00
parent 76bc0a2ba6
commit 0af35c2224
2 changed files with 13 additions and 5 deletions

View file

@ -39,15 +39,23 @@ def register_stanza_plugin(stanza, plugin, iterable=False, overrides=False):
the parent stanza.
"""
tag = "{%s}%s" % (plugin.namespace, plugin.name)
# Prevent weird memory reference gotchas by ensuring
# that the parent stanza class has its own set of
# plugin info maps and is not using the mappings from
# an ancestor class (like ElementBase).
plugin_info = ('plugin_attrib_map', 'plugin_tag_map',
'plugin_iterables', 'plugin_overrides')
for attr in plugin_info:
info = getattr(stanza, attr)
setattr(stanza, attr, info.copy())
stanza.plugin_attrib_map[plugin.plugin_attrib] = plugin
stanza.plugin_tag_map[tag] = plugin
if iterable:
# Prevent weird memory reference gotchas.
stanza.plugin_iterables = stanza.plugin_iterables.copy()
stanza.plugin_iterables.add(plugin)
if overrides:
# Prevent weird memory reference gotchas.
stanza.plugin_overrides = stanza.plugin_overrides.copy()
for interface in plugin.overrides:
stanza.plugin_overrides[interface] = plugin.plugin_attrib

View file

@ -460,7 +460,7 @@ class TestStreamPubsub(SleekTest):
</retract>
</pubsub>
</iq>
""", use_values=False)
""")
def testPurge(self):
"""Test removing all items from a node."""