Remove locking from static disco.

This commit is contained in:
Emmanuel Gil Peyrot 2016-09-20 15:49:27 +09:00
parent 7cd1cf32ae
commit 125336aeee
2 changed files with 112 additions and 139 deletions

View File

@ -7,7 +7,6 @@
""" """
import logging import logging
import threading
from slixmpp import Iq from slixmpp import Iq
from slixmpp.exceptions import XMPPError, IqError, IqTimeout from slixmpp.exceptions import XMPPError, IqError, IqTimeout
@ -48,7 +47,6 @@ class StaticDisco(object):
self.nodes = {} self.nodes = {}
self.xmpp = xmpp self.xmpp = xmpp
self.disco = disco self.disco = disco
self.lock = threading.RLock()
def add_node(self, jid=None, node=None, ifrom=None): def add_node(self, jid=None, node=None, ifrom=None):
""" """
@ -59,7 +57,6 @@ class StaticDisco(object):
jid -- The JID that will own the new stanzas. jid -- The JID that will own the new stanzas.
node -- The node that will own the new stanzas. node -- The node that will own the new stanzas.
""" """
with self.lock:
if jid is None: if jid is None:
jid = self.xmpp.boundjid.full jid = self.xmpp.boundjid.full
if node is None: if node is None:
@ -75,7 +72,6 @@ class StaticDisco(object):
self.nodes[(jid, node, ifrom)]['items']['node'] = node self.nodes[(jid, node, ifrom)]['items']['node'] = node
def get_node(self, jid=None, node=None, ifrom=None): def get_node(self, jid=None, node=None, ifrom=None):
with self.lock:
if jid is None: if jid is None:
jid = self.xmpp.boundjid.full jid = self.xmpp.boundjid.full
if node is None: if node is None:
@ -89,7 +85,6 @@ class StaticDisco(object):
return self.nodes[(jid, node, ifrom)] return self.nodes[(jid, node, ifrom)]
def node_exists(self, jid=None, node=None, ifrom=None): def node_exists(self, jid=None, node=None, ifrom=None):
with self.lock:
if jid is None: if jid is None:
jid = self.xmpp.boundjid.full jid = self.xmpp.boundjid.full
if node is None: if node is None:
@ -199,7 +194,6 @@ class StaticDisco(object):
The data parameter is not used. The data parameter is not used.
""" """
with self.lock:
if not self.node_exists(jid, node): if not self.node_exists(jid, node):
if not node: if not node:
return DiscoInfo() return DiscoInfo()
@ -214,7 +208,6 @@ class StaticDisco(object):
The data parameter is a disco#info substanza. The data parameter is a disco#info substanza.
""" """
with self.lock:
self.add_node(jid, node) self.add_node(jid, node)
self.get_node(jid, node)['info'] = data self.get_node(jid, node)['info'] = data
@ -224,7 +217,6 @@ class StaticDisco(object):
The data parameter is not used. The data parameter is not used.
""" """
with self.lock:
if self.node_exists(jid, node): if self.node_exists(jid, node):
self.get_node(jid, node)['info'] = DiscoInfo() self.get_node(jid, node)['info'] = DiscoInfo()
@ -234,7 +226,6 @@ class StaticDisco(object):
The data parameter is not used. The data parameter is not used.
""" """
with self.lock:
if not self.node_exists(jid, node): if not self.node_exists(jid, node):
if not node: if not node:
return DiscoItems() return DiscoItems()
@ -250,7 +241,6 @@ class StaticDisco(object):
The data parameter may provide: The data parameter may provide:
items -- A set of items in tuple format. items -- A set of items in tuple format.
""" """
with self.lock:
items = data.get('items', set()) items = data.get('items', set())
self.add_node(jid, node) self.add_node(jid, node)
self.get_node(jid, node)['items']['items'] = items self.get_node(jid, node)['items']['items'] = items
@ -261,7 +251,6 @@ class StaticDisco(object):
The data parameter is not used. The data parameter is not used.
""" """
with self.lock:
if self.node_exists(jid, node): if self.node_exists(jid, node):
self.get_node(jid, node)['items'] = DiscoItems() self.get_node(jid, node)['items'] = DiscoItems()
@ -275,7 +264,6 @@ class StaticDisco(object):
name -- Optional human readable name for this identity. name -- Optional human readable name for this identity.
lang -- Optional standard xml:lang value. lang -- Optional standard xml:lang value.
""" """
with self.lock:
self.add_node(jid, node) self.add_node(jid, node)
self.get_node(jid, node)['info'].add_identity( self.get_node(jid, node)['info'].add_identity(
data.get('category', ''), data.get('category', ''),
@ -291,7 +279,6 @@ class StaticDisco(object):
identities -- A list of identities in tuple form: identities -- A list of identities in tuple form:
(category, type, name, lang) (category, type, name, lang)
""" """
with self.lock:
identities = data.get('identities', set()) identities = data.get('identities', set())
self.add_node(jid, node) self.add_node(jid, node)
self.get_node(jid, node)['info']['identities'] = identities self.get_node(jid, node)['info']['identities'] = identities
@ -306,7 +293,6 @@ class StaticDisco(object):
name -- Optional human readable name for this identity. name -- Optional human readable name for this identity.
lang -- Optional, standard xml:lang value. lang -- Optional, standard xml:lang value.
""" """
with self.lock:
if self.node_exists(jid, node): if self.node_exists(jid, node):
self.get_node(jid, node)['info'].del_identity( self.get_node(jid, node)['info'].del_identity(
data.get('category', ''), data.get('category', ''),
@ -320,7 +306,6 @@ class StaticDisco(object):
The data parameter is not used. The data parameter is not used.
""" """
with self.lock:
if self.node_exists(jid, node): if self.node_exists(jid, node):
del self.get_node(jid, node)['info']['identities'] del self.get_node(jid, node)['info']['identities']
@ -331,7 +316,6 @@ class StaticDisco(object):
The data parameter should include: The data parameter should include:
feature -- The namespace of the supported feature. feature -- The namespace of the supported feature.
""" """
with self.lock:
self.add_node(jid, node) self.add_node(jid, node)
self.get_node(jid, node)['info'].add_feature( self.get_node(jid, node)['info'].add_feature(
data.get('feature', '')) data.get('feature', ''))
@ -343,7 +327,6 @@ class StaticDisco(object):
The data parameter should include: The data parameter should include:
features -- The new set of supported features. features -- The new set of supported features.
""" """
with self.lock:
features = data.get('features', set()) features = data.get('features', set())
self.add_node(jid, node) self.add_node(jid, node)
self.get_node(jid, node)['info']['features'] = features self.get_node(jid, node)['info']['features'] = features
@ -355,7 +338,6 @@ class StaticDisco(object):
The data parameter should include: The data parameter should include:
feature -- The namespace of the removed feature. feature -- The namespace of the removed feature.
""" """
with self.lock:
if self.node_exists(jid, node): if self.node_exists(jid, node):
self.get_node(jid, node)['info'].del_feature( self.get_node(jid, node)['info'].del_feature(
data.get('feature', '')) data.get('feature', ''))
@ -366,7 +348,6 @@ class StaticDisco(object):
The data parameter is not used. The data parameter is not used.
""" """
with self.lock:
if not self.node_exists(jid, node): if not self.node_exists(jid, node):
return return
del self.get_node(jid, node)['info']['features'] del self.get_node(jid, node)['info']['features']
@ -381,7 +362,6 @@ class StaticDisco(object):
non-addressable items. non-addressable items.
name -- Optional human readable name for the item. name -- Optional human readable name for the item.
""" """
with self.lock:
self.add_node(jid, node) self.add_node(jid, node)
self.get_node(jid, node)['items'].add_item( self.get_node(jid, node)['items'].add_item(
data.get('ijid', ''), data.get('ijid', ''),
@ -396,7 +376,6 @@ class StaticDisco(object):
ijid -- JID of the item to remove. ijid -- JID of the item to remove.
inode -- Optional extra identifying information. inode -- Optional extra identifying information.
""" """
with self.lock:
if self.node_exists(jid, node): if self.node_exists(jid, node):
self.get_node(jid, node)['items'].del_item( self.get_node(jid, node)['items'].del_item(
data.get('ijid', ''), data.get('ijid', ''),
@ -410,7 +389,6 @@ class StaticDisco(object):
containing the disco info to cache, or containing the disco info to cache, or
the disco#info substanza itself. the disco#info substanza itself.
""" """
with self.lock:
if isinstance(data, Iq): if isinstance(data, Iq):
data = data['disco_info'] data = data['disco_info']
@ -423,7 +401,6 @@ class StaticDisco(object):
The data parameter is not used. The data parameter is not used.
""" """
with self.lock:
if not self.node_exists(jid, node, ifrom): if not self.node_exists(jid, node, ifrom):
return None return None
else: else:

View File

@ -124,7 +124,6 @@ class StaticCaps(object):
return None return None
def cache_caps(self, jid, node, ifrom, data): def cache_caps(self, jid, node, ifrom, data):
with self.static.lock:
verstring = data.get('verstring', None) verstring = data.get('verstring', None)
info = data.get('info', None) info = data.get('info', None)
if not verstring or not info: if not verstring or not info:
@ -132,15 +131,12 @@ class StaticCaps(object):
self.ver_cache[verstring] = info self.ver_cache[verstring] = info
def assign_verstring(self, jid, node, ifrom, data): def assign_verstring(self, jid, node, ifrom, data):
with self.static.lock:
if isinstance(jid, JID): if isinstance(jid, JID):
jid = jid.full jid = jid.full
self.jid_vers[jid] = data.get('verstring', None) self.jid_vers[jid] = data.get('verstring', None)
def get_verstring(self, jid, node, ifrom, data): def get_verstring(self, jid, node, ifrom, data):
with self.static.lock:
return self.jid_vers.get(jid, None) return self.jid_vers.get(jid, None)
def get_caps(self, jid, node, ifrom, data): def get_caps(self, jid, node, ifrom, data):
with self.static.lock:
return self.ver_cache.get(data.get('verstring', None), None) return self.ver_cache.get(data.get('verstring', None), None)