summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichele Cella <michele.cella@gmail.com>2015-07-31 11:55:50 +0200
committerMichele Cella <michele.cella@gmail.com>2015-07-31 11:55:50 +0200
commitf54ebec654fa14ed1db85d141c5268e60ac6d737 (patch)
treece27b09840793b4152e67e1dc3113f04289d5d1b
parentbb094cc6498838cece046d9ed74881232fb5010d (diff)
downloadslixmpp-f54ebec654fa14ed1db85d141c5268e60ac6d737.tar.gz
slixmpp-f54ebec654fa14ed1db85d141c5268e60ac6d737.tar.bz2
slixmpp-f54ebec654fa14ed1db85d141c5268e60ac6d737.tar.xz
slixmpp-f54ebec654fa14ed1db85d141c5268e60ac6d737.zip
Fixes #378: must acquire JID_CACHE_LOCK before adding to JID_CACHE
-rw-r--r--sleekxmpp/jid.py23
1 files 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,