Fix memory leak due to loop references

This commit is contained in:
Cédric Krier committed 2010-09-29 11:30:06 +02:00
1 parent d5616e1f37
commit e4c6feb99b
8 files changed
+42 -12

No files matched your search

+3 -5
View File
@@ -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
+7 -2
View File
@@ -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()
+4 -4
View File
@@ -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':
-1
View File
@@ -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)
+3
View File
@@ -36,3 +36,6 @@ class SignalEvent(object):
else:
i += 1
return True
def destroy(self):
self.__connects = None