fixed a rather large memory leak
This commit is contained in:

committed by
Tom Nichols

parent
e0c32b6d9b
commit
4c410dd48a
@@ -93,10 +93,10 @@ class MUCPresence(ElementBase):
|
||||
return self
|
||||
|
||||
def getNick(self):
|
||||
return self.parent['from'].resource
|
||||
return self.parent()['from'].resource
|
||||
|
||||
def getRoom(self):
|
||||
return self.parent['from'].bare
|
||||
return self.parent()['from'].bare
|
||||
|
||||
def setNick(self, value):
|
||||
logging.warning("Cannot set nick through mucpresence plugin.")
|
||||
|
@@ -22,7 +22,7 @@ class Error(ElementBase):
|
||||
self['type'] = 'cancel'
|
||||
self['condition'] = 'feature-not-implemented'
|
||||
if self.parent is not None:
|
||||
self.parent['type'] = 'error'
|
||||
self.parent()['type'] = 'error'
|
||||
|
||||
def getCondition(self):
|
||||
for child in self.xml.getchildren():
|
||||
|
@@ -31,4 +31,5 @@ class HTMLIM(ElementBase):
|
||||
return html
|
||||
|
||||
def delHtml(self):
|
||||
return self.__del__()
|
||||
if self.parent is not None:
|
||||
self.parent().xml.remove(self.xml)
|
||||
|
@@ -22,4 +22,5 @@ class Nick(ElementBase):
|
||||
return self.xml.text
|
||||
|
||||
def delNick(self):
|
||||
return self.__del__()
|
||||
if self.parent is not None:
|
||||
self.parent().xml.remove(self.xml)
|
||||
|
@@ -9,6 +9,7 @@ from xml.etree import cElementTree as ET
|
||||
import logging
|
||||
import traceback
|
||||
import sys
|
||||
import weakref
|
||||
|
||||
if sys.version_info < (3,0):
|
||||
from . import tostring26 as tostring
|
||||
@@ -51,7 +52,10 @@ class ElementBase(tostring.ToString):
|
||||
subitem = None
|
||||
|
||||
def __init__(self, xml=None, parent=None):
|
||||
self.parent = parent
|
||||
if parent is None:
|
||||
self.parent = None
|
||||
else:
|
||||
self.parent = weakref.ref(parent)
|
||||
self.xml = xml
|
||||
self.plugins = {}
|
||||
self.iterables = []
|
||||
@@ -158,7 +162,7 @@ class ElementBase(tostring.ToString):
|
||||
else:
|
||||
self.xml.append(new)
|
||||
if self.parent is not None:
|
||||
self.parent.xml.append(self.xml)
|
||||
self.parent().xml.append(self.xml)
|
||||
return True #had to generate XML
|
||||
else:
|
||||
return False
|
||||
@@ -302,9 +306,9 @@ class ElementBase(tostring.ToString):
|
||||
self.xml.append(xml)
|
||||
return self
|
||||
|
||||
def __del__(self):
|
||||
if self.parent is not None:
|
||||
self.parent.xml.remove(self.xml)
|
||||
#def __del__(self): #prevents garbage collection of reference cycle
|
||||
# if self.parent is not None:
|
||||
# self.parent.xml.remove(self.xml)
|
||||
|
||||
class StanzaBase(ElementBase):
|
||||
name = 'stanza'
|
||||
|
Reference in New Issue
Block a user