From 61c72ac3ea621bcf0854061fff111bd88d977998 Mon Sep 17 00:00:00 2001
From: shortcutme <tamas@zeronet.io>
Date: Mon, 18 Mar 2019 03:36:12 +0100
Subject: [PATCH] Fix SQLite concurrency errors

---
 src/Db/Db.py       |  9 ++++++++-
 src/Db/DbCursor.py | 13 ++++---------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/Db/Db.py b/src/Db/Db.py
index cda243a5..b6603a7a 100644
--- a/src/Db/Db.py
+++ b/src/Db/Db.py
@@ -56,6 +56,7 @@ class Db(object):
         self.schema["version"] = self.schema.get("version", 1)
         self.conn = None
         self.cur = None
+        self.progress_sleeping = False
         self.log = logging.getLogger("Db:%s" % schema["db_name"])
         self.table_names = None
         self.collect_stats = False
@@ -92,7 +93,9 @@ class Db(object):
         )
 
     def progress(self, *args, **kwargs):
-        gevent.sleep()
+        self.progress_sleeping = True
+        time.sleep(0.001)
+        self.progress_sleeping = False
 
     # Execute query using dbcursor
     def execute(self, query, params=None):
@@ -101,6 +104,10 @@ class Db(object):
         return self.cur.execute(query, params)
 
     def commit(self, reason="Unknown"):
+        if self.progress_sleeping:
+            self.log.debug("Commit ignored: Progress sleeping")
+            return False
+
         try:
             s = time.time()
             self.conn.commit()
diff --git a/src/Db/DbCursor.py b/src/Db/DbCursor.py
index 7df7dacb..a50539f8 100644
--- a/src/Db/DbCursor.py
+++ b/src/Db/DbCursor.py
@@ -84,16 +84,11 @@ class DbCursor:
 
     def execute(self, query, params=None):
         query = query.strip()
+        while self.db.progress_sleeping:
+            time.sleep(0.1)
+
         self.db.last_query_time = time.time()
 
-        if time.time() - self.db.last_sleep_time > 0.1:
-            if self.db.num_execute_since_sleep > 100:
-                gevent.sleep(0.001)
-            self.db.num_execute_since_sleep = 0
-            self.db.last_sleep_time = time.time()
-
-        self.db.num_execute_since_sleep += 1
-
         query, params = self.parseQuery(query, params)
 
         s = time.time()
@@ -128,7 +123,7 @@ class DbCursor:
 
         params = query_sets
         params.update(query_wheres)
-        self.cursor.execute(
+        self.execute(
             "UPDATE %s SET %s WHERE %s" % (table, ", ".join(sql_sets), " AND ".join(sql_wheres)),
             params
         )