From 46bcddc10f87bd4a688f1538f3981079d477cb5d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Mar 2011 12:47:36 -0700 Subject: [PATCH] Fix regression that caused memory leak in Tag Browser. This would show up as the memory usage of calibre increasing when switching libraries. Fixes #9246 (Memory allocation while changing library) --- src/calibre/gui2/actions/choose_library.py | 1 + src/calibre/gui2/tag_view.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/calibre/gui2/actions/choose_library.py b/src/calibre/gui2/actions/choose_library.py index f3a7f1742d..6f4ca624cb 100644 --- a/src/calibre/gui2/actions/choose_library.py +++ b/src/calibre/gui2/actions/choose_library.py @@ -355,6 +355,7 @@ class ChooseLibraryAction(InterfaceAction): print print 'before:', self.before_mem print 'after:', memory()/1024**2 + print self.dbref = self.before_mem = None diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index b310ce55fb..d03a4f4cca 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -572,6 +572,13 @@ class TagTreeItem(object): # {{{ else: self.tooltip = '' + def break_cycles(self): + for x in self.children: + if hasattr(x, 'break_cycles'): + x.break_cycles() + self.parent = self.icon_state_map = self.bold_font = self.tag = \ + self.icon = self.children = None + def __str__(self): if self.type == self.ROOT: return 'ROOT' @@ -780,6 +787,7 @@ class TagsModel(QAbstractItemModel): # {{{ self.refresh(data=data) def break_cycles(self): + self.root_item.break_cycles() self.db = self.root_item = None def mimeTypes(self):