From a05ebdbefbec50dfe6d36ece5fedb069bceb834c Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Fri, 13 Jan 2017 16:20:39 +1000 Subject: [PATCH] do GC on autosave - ensures we're not called as part of the db progress callback - minimises the chance of data loss if a gc causes a crash --- anki/collection.py | 3 ++- aqt/main.py | 15 +++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/anki/collection.py b/anki/collection.py index 21503b53d..a8aa86eb9 100644 --- a/anki/collection.py +++ b/anki/collection.py @@ -134,9 +134,10 @@ crt=?, mod=?, scm=?, dty=?, usn=?, ls=?, conf=?""", self._lastSave = time.time() def autosave(self): - "Save if 5 minutes has passed since last save." + "Save if 5 minutes has passed since last save. True if saved." if time.time() - self._lastSave > 300: self.save() + return True def lock(self): # make sure we don't accidentally bump mod time diff --git a/aqt/main.py b/aqt/main.py index 474919f73..9f3d5ff5d 100644 --- a/aqt/main.py +++ b/aqt/main.py @@ -69,7 +69,7 @@ class AnkiQt(QMainWindow): def setupUI(self): self.col = None self.setupCrashLog() - self.setupGC() + self.disableGC() self.setupAppMsg() self.setupKeys() self.setupThreads() @@ -709,8 +709,10 @@ title="%s" %s>%s''' % ( self.maybeEnableUndo() def autosave(self): - self.col.autosave() + saved = self.col.autosave() self.maybeEnableUndo() + if saved: + self.doGC() # Other menu operations ########################################################################## @@ -1172,15 +1174,12 @@ Please ensure a profile is open and Anki is not busy, then try again."""), def gcWindow(self, obj): obj.deleteLater() - def setupGC(self): + def disableGC(self): gc.collect() gc.disable() - #gc.set_debug(gc.DEBUG_SAVEALL) - self.gcTimer = QTimer(self) - self.gcTimer.timeout.connect(self.runGC) - self.gcTimer.start(60*1000) - def runGC(self): + def doGC(self): + assert not self.progress.inDB gc.collect() # Crash log