From 13259a4c9c4cd3bbbb150ef6df2a5179c9c4c1ae Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 1 Sep 2020 09:26:19 +0530 Subject: [PATCH] Dont call __setitem__ while holding db connection open --- src/calibre/db/backend.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/calibre/db/backend.py b/src/calibre/db/backend.py index d23c5a9856..f01bb104d7 100644 --- a/src/calibre/db/backend.py +++ b/src/calibre/db/backend.py @@ -120,6 +120,7 @@ class DBPrefs(dict): # {{{ def __setitem__(self, key, val): if not self.disable_setting: raw = self.to_raw(val) + do_set = False with self.db.conn: try: dbraw = next(self.db.execute('SELECT id,val FROM preferences WHERE key=?', (key,))) @@ -130,7 +131,9 @@ class DBPrefs(dict): # {{{ self.db.execute('INSERT INTO preferences (key,val) VALUES (?,?)', (key, raw)) else: self.db.execute('UPDATE preferences SET val=? WHERE id=?', (raw, dbraw[0])) - dict.__setitem__(self, key, val) + do_set = True + if do_set: + dict.__setitem__(self, key, val) def set(self, key, val): self.__setitem__(key, val)