summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/changes/bug_5449_preload-strptime-to-avoid-multi-thread-problem2
-rw-r--r--common/src/leap/soledad/common/couch.py11
2 files changed, 13 insertions, 0 deletions
diff --git a/common/changes/bug_5449_preload-strptime-to-avoid-multi-thread-problem b/common/changes/bug_5449_preload-strptime-to-avoid-multi-thread-problem
new file mode 100644
index 00000000..17d1f463
--- /dev/null
+++ b/common/changes/bug_5449_preload-strptime-to-avoid-multi-thread-problem
@@ -0,0 +1,2 @@
+ o Preload time.strptime() to avoid multi-threaded problem on couch backend
+ get_docs() method (#5449).
diff --git a/common/src/leap/soledad/common/couch.py b/common/src/leap/soledad/common/couch.py
index 1bb84985..8e8613a1 100644
--- a/common/src/leap/soledad/common/couch.py
+++ b/common/src/leap/soledad/common/couch.py
@@ -1401,6 +1401,17 @@ class CouchDatabase(CommonBackend):
in matching doc_ids order.
:rtype: iterable
"""
+ # Workaround for:
+ #
+ # http://bugs.python.org/issue7980
+ # https://leap.se/code/issues/5449
+ #
+ # python-couchdb uses time.strptime, which is not thread safe. In
+ # order to avoid the problem described on the issues above, we preload
+ # strptime here by evaluating the conversion of an arbitrary date.
+ # This will not be needed when/if we switch from python-couchdb to
+ # paisley.
+ time.strptime('Mar 4 1917', '%b %d %Y')
# spawn threads to retrieve docs
threads = []
for doc_id in doc_ids: