Fix memory leak due to loop references
This commit is contained in:
1 parent
d5616e1f37
commit
e4c6feb99b
8 files changed
+42
-12
No files matched your search
@@ -5,7 +5,6 @@ import gettext
|
||||
import gtk
|
||||
import gobject
|
||||
import locale
|
||||
import gc
|
||||
import tryton.rpc as rpc
|
||||
from tryton.gui.window.view_form.screen import Screen
|
||||
from tryton.action import Action
|
||||
@@ -200,11 +199,10 @@ class Form(SignalEvent):
|
||||
def destroy(self):
|
||||
self.screen.signal_unconnect(self)
|
||||
self.screen.destroy()
|
||||
del self.screen
|
||||
del self.widget
|
||||
self.screen = None
|
||||
self.widget = None
|
||||
self.scrolledwindow.destroy()
|
||||
del self.scrolledwindow
|
||||
gc.collect()
|
||||
self.scrolledwindow = None
|
||||
|
||||
def sel_ids_get(self):
|
||||
return self.screen.sel_ids_get()
|
||||
|
||||
@@ -134,6 +134,9 @@ class CharField(object):
|
||||
def get_timestamp(self, record):
|
||||
return {}
|
||||
|
||||
def destroy(self):
|
||||
self.parent = None
|
||||
|
||||
|
||||
class SelectionField(CharField):
|
||||
|
||||
|
||||
@@ -334,3 +334,17 @@ class Group(SignalEvent, list):
|
||||
record = self.__id2record[old_id]
|
||||
self.__id2record[record.id] = record
|
||||
del self.__id2record[old_id]
|
||||
|
||||
def destroy(self):
|
||||
super(Group, self).destroy()
|
||||
self.__window = None
|
||||
self.parent = None
|
||||
for field in self.fields.itervalues():
|
||||
field.destroy()
|
||||
self.fields = None
|
||||
self.record_removed = None
|
||||
self.record_deleted = None
|
||||
self.__id2record = None
|
||||
for record in self:
|
||||
record.destroy()
|
||||
self[:] = []
|
||||
@@ -460,3 +460,11 @@ class Record(SignalEvent):
|
||||
except Exception:
|
||||
return 0
|
||||
return self.attachment_count
|
||||
|
||||
def destroy(self):
|
||||
super(Record, self).destroy()
|
||||
self.window = None
|
||||
self.parent = None
|
||||
self.group = None
|
||||
self.value = None
|
||||
self.next = None
|
||||
@@ -239,9 +239,14 @@ class Screen(SignalEvent):
|
||||
def destroy(self):
|
||||
for view in self.views:
|
||||
view.destroy()
|
||||
del view
|
||||
self.group.signal_unconnect(self)
|
||||
del self.views
|
||||
self.group.destroy()
|
||||
self.parent = None
|
||||
self.__window = None
|
||||
self.__group = None
|
||||
self.__current_record = None
|
||||
self.screen_container = None
|
||||
self.widget = None
|
||||
|
||||
def switch_view(self, view_type=None, default=True, context=None):
|
||||
self.current_view.set_value()
|
||||
|
||||
@@ -490,7 +490,7 @@ class ViewList(ParserView):
|
||||
pass
|
||||
|
||||
def __str__(self):
|
||||
return 'ViewList (%s)' % self.screen.model_name
|
||||
return 'ViewList (%d)' % id(self)
|
||||
|
||||
def __getitem__(self, name):
|
||||
return None
|
||||
@@ -518,9 +518,9 @@ class ViewList(ParserView):
|
||||
except Exception:
|
||||
pass
|
||||
self.widget_tree.destroy()
|
||||
del self.screen
|
||||
del self.widget_tree
|
||||
del self.widget
|
||||
self.screen = None
|
||||
self.widget_tree = None
|
||||
self.widget = None
|
||||
|
||||
def __sig_switch(self, treeview, path, column):
|
||||
if column._type == 'button':
|
||||
|
||||
@@ -381,7 +381,6 @@ class ViewTree(object):
|
||||
return True
|
||||
|
||||
def reload(self):
|
||||
del self.model
|
||||
self.model = ViewTreeModel(self.ids, self.view_info, self.fields_order,
|
||||
self.fields, self.fields_attrs, context=self.context,
|
||||
pixbufs=self.pixbufs, treeview=self.view)
|
||||
|
||||
@@ -36,3 +36,6 @@ class SignalEvent(object):
|
||||
else:
|
||||
i += 1
|
||||
return True
|
||||
|
||||
def destroy(self):
|
||||
self.__connects = None
|
||||
Reference in new issue
Block a user