core (patches): partially fixed jid caching:
jid caching in Twisted use a dict (__internJIDs) which associate a jid as string to its jid.JID instance. But this caching doesn't handle mutability of the objects, resulting wrong jid returned when a modification is done (e.g. if resource is changed). This is a temporary workaround until the patch is proposed and merged upstream. note: this is a partial fix because the caching is also leaking memory (cf. https://twistedmatrix.com/trac/ticket/5122)
This commit is contained in:
parent
39025b9f15
commit
2e4f4069c5
1 changed files with 24 additions and 1 deletions
|
|
@ -1,4 +1,5 @@
|
|||
from twisted.words.protocols.jabber import xmlstream, sasl, client as tclient
|
||||
import copy
|
||||
from twisted.words.protocols.jabber import xmlstream, sasl, client as tclient, jid
|
||||
from twisted.internet import ssl
|
||||
from wokkel import client
|
||||
from sat.core.constants import Const as C
|
||||
|
|
@ -139,9 +140,31 @@ class CheckAuthInitializer(client.CheckAuthInitializer):
|
|||
raise Exception("No available authentication method found")
|
||||
|
||||
|
||||
# jid fix
|
||||
|
||||
def internJID(jidstring):
|
||||
"""
|
||||
Return interned JID.
|
||||
|
||||
@rtype: L{JID}
|
||||
"""
|
||||
# XXX: this interJID return a copy of the cached jid
|
||||
# this avoid modification of cached jid as JID is mutable
|
||||
# TODO: propose this upstream
|
||||
|
||||
if jidstring in jid.__internJIDs:
|
||||
return copy.copy(jid.__internJIDs[jidstring])
|
||||
else:
|
||||
j = jid.JID(jidstring)
|
||||
jid.__internJIDs[jidstring] = j
|
||||
return copy.copy(j)
|
||||
|
||||
|
||||
def apply():
|
||||
# certificate validation
|
||||
xmlstream.TLSInitiatingInitializer = TLSInitiatingInitializer
|
||||
client.XMPPClient = XMPPClient
|
||||
# XmlStream triggers
|
||||
xmlstream.XmlStreamFactory.protocol = XmlStream
|
||||
# jid fix
|
||||
jid.internJID = internJID
|
||||
|
|
|
|||
Loading…
Reference in a new issue