From 4c214b7ff9351dd98efbb033dd5e09b8ff9ff763 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Wed, 20 Jan 2016 07:54:35 -0300 Subject: [Fix] slow IO-bound calls block reactor - Move them to a thread so reactor can continue processing e.g. http requests --- client/src/leap/soledad/client/encdecpool.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/src/leap/soledad/client/encdecpool.py b/client/src/leap/soledad/client/encdecpool.py index 0954c1df..34667a1e 100644 --- a/client/src/leap/soledad/client/encdecpool.py +++ b/client/src/leap/soledad/client/encdecpool.py @@ -28,6 +28,7 @@ import json import logging from twisted.internet import reactor +from twisted.internet import threads from twisted.internet import defer from twisted.python import log @@ -687,7 +688,11 @@ class SyncDecrypterPool(SyncEncryptDecryptPool): """ insertable = yield self._get_insertable_docs() for doc_fields in insertable: - self._insert_decrypted_local_doc(*doc_fields) + method = self._insert_decrypted_local_doc + # FIXME: This is used only because SQLCipherU1DBSync is synchronous + # When adbapi is used there is no need for an external thread + # Without this the reactor can freeze and fail docs download + yield threads.deferToThread(method, *doc_fields) defer.returnValue(insertable) def _delete_processed_docs(self, inserted): -- cgit v1.2.3