Fix memory leak when switching libraries

This commit is contained in:
Kovid Goyal 2011-01-21 09:46:50 -07:00
parent 396da1f7bc
commit f227086913
3 changed files with 10 additions and 0 deletions

View File

@ -384,7 +384,14 @@ class ChooseLibraryAction(InterfaceAction):
return return
prefs['library_path'] = loc prefs['library_path'] = loc
#from calibre.utils.mem import memory
#import weakref, gc
#ref = weakref.ref(self.gui.library_view.model().db)
#before = memory()/1024**2
self.gui.library_moved(loc) self.gui.library_moved(loc)
#print gc.get_referrers(ref)[0]
#for i in xrange(3): gc.collect()
#print 'leaked:', memory()/1024**2 - before
def qs_requested(self, idx, *args): def qs_requested(self, idx, *args):
self.switch_requested(self.qs_locations[idx]) self.switch_requested(self.qs_locations[idx])

View File

@ -440,6 +440,7 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{
except: except:
import traceback import traceback
traceback.print_exc() traceback.print_exc()
olddb.break_cycles()
if self.device_connected: if self.device_connected:
self.set_books_in_library(self.booklists(), reset=True) self.set_books_in_library(self.booklists(), reset=True)
self.refresh_ondevice() self.refresh_ondevice()

View File

@ -361,6 +361,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
self.refresh() self.refresh()
self.last_update_check = self.last_modified() self.last_update_check = self.last_modified()
def break_cycles(self):
self.data = self.field_metadata = self.prefs = self.listeners = None
def initialize_database(self): def initialize_database(self):
metadata_sqlite = open(P('metadata_sqlite.sql'), 'rb').read() metadata_sqlite = open(P('metadata_sqlite.sql'), 'rb').read()