From f54ebec654fa14ed1db85d141c5268e60ac6d737 Mon Sep 17 00:00:00 2001
From: Michele Cella <michele.cella@gmail.com>
Date: Fri, 31 Jul 2015 11:55:50 +0200
Subject: Fixes #378: must acquire JID_CACHE_LOCK before adding to JID_CACHE

---
 sleekxmpp/jid.py | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/sleekxmpp/jid.py b/sleekxmpp/jid.py
index 613b272e..754a3d3a 100644
--- a/sleekxmpp/jid.py
+++ b/sleekxmpp/jid.py
@@ -72,19 +72,18 @@ JID_CACHE_LOCK = threading.Lock()
 JID_CACHE_MAX_SIZE = 1024
 
 def _cache(key, parts, locked):
-    JID_CACHE[key] = (parts, locked)
-    if len(JID_CACHE) > JID_CACHE_MAX_SIZE:
-        with JID_CACHE_LOCK:
-            while len(JID_CACHE) > JID_CACHE_MAX_SIZE:
-                found = None
-                for key, item in JID_CACHE.items():
-                    if not item[1]: # if not locked
-                        found = key
-                        break
-                if not found: # more than MAX_SIZE locked
-                    # warn?
+    with JID_CACHE_LOCK:
+        JID_CACHE[key] = (parts, locked)
+        while len(JID_CACHE) > JID_CACHE_MAX_SIZE:
+            found = None
+            for key, item in JID_CACHE.items():
+                if not item[1]: # if not locked
+                    found = key
                     break
-                del JID_CACHE[found]
+            if not found: # more than MAX_SIZE locked
+                # warn?
+                break
+            del JID_CACHE[found]
 
 # pylint: disable=c0103
 #: The nodeprep profile of stringprep used to validate the local,
-- 
cgit v1.2.3