From 9226922af8586448c208c26df46bbf94dfdc2707 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Tue, 15 Mar 2011 06:33:43 +0900 Subject: [PATCH] properly lock the DB --- anki/db.py | 5 ++--- anki/deck.py | 8 +++++++- anki/storage.py | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/anki/db.py b/anki/db.py index 5557387cb..f75499c65 100644 --- a/anki/db.py +++ b/anki/db.py @@ -14,9 +14,8 @@ except ImportError: from anki.hooks import runHook class DB(object): - def __init__(self, path, level="EXCLUSIVE", text=None): - self._db = sqlite.connect( - path, timeout=0, isolation_level=level) + def __init__(self, path, text=None): + self._db = sqlite.connect(path, timeout=0, isolation_level=None) if text: self._db.text_factory = text self._path = path diff --git a/anki/deck.py b/anki/deck.py index 425291b70..7dd88f7f3 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -113,9 +113,14 @@ qconf=?, conf=?, data=?""", simplejson.dumps(self.conf), simplejson.dumps(self.data)) def save(self): - "Flush, then commit DB." + "Flush, commit DB, and take out another write lock." self.flush() self.db.commit() + self.lock() + + def lock(self): + self.db.execute("begin exclusive") + self.db.execute("update deck set mod=mod") def close(self, save=True): "Disconnect from DB." @@ -135,6 +140,7 @@ qconf=?, conf=?, data=?""", def rollback(self): self.db.rollback() + self.lock() def modSchema(self): if not self.schemaDirty(): diff --git a/anki/storage.py b/anki/storage.py index e5123a249..412c135b7 100644 --- a/anki/storage.py +++ b/anki/storage.py @@ -34,6 +34,7 @@ def Deck(path, queue=True): elif create: deck.addModel(BasicModel(deck)) deck.save() + deck.lock() if not queue: return deck # rebuild queue