plugin XEP-0115: Fix race condition on disco creation:
This patch chains disco query to `conn_deferred` to be sure that `client.disco` is set. fix #484
This commit is contained in:
parent
84e92f9a98
commit
29a39b771b
2 changed files with 8 additions and 2 deletions
|
|
@ -95,6 +95,8 @@ class SatXMPPEntity(ABC):
|
|||
discoHandler: disco.DiscoHandler
|
||||
messageProt: "SatMessageProtocol"
|
||||
identities: list[disco.DiscoIdentity]
|
||||
# Fire when entity is connected
|
||||
conn_deferred: defer.Deferred
|
||||
xmlstream: mod_xmlstream.XmlStream
|
||||
tor: "Tor | None" = None
|
||||
|
||||
|
|
|
|||
|
|
@ -491,9 +491,13 @@ class XEP_0115_handler(XMPPHandler):
|
|||
# Query the caps node to get disco info (XEP-0115 §6.2)
|
||||
caps_node = f"{node}#{ver}" if node else ver
|
||||
log.debug(f"Querying caps node {caps_node} for server {server_jid}")
|
||||
d = self.client.disco.requestInfo(
|
||||
# We chain to `conn_deferred` to avoid race condition and be sure that
|
||||
# we have `client.disco` set (see
|
||||
# https://www.goffi.org/tickets/view/484)
|
||||
d = self.client.conn_deferred
|
||||
d.addCallback(lambda __: self.client.disco.requestInfo(
|
||||
server_jid, nodeIdentifier=caps_node
|
||||
)
|
||||
))
|
||||
d.addCallback(self._caps_node_cb, ver)
|
||||
d.addErrback(self._caps_node_eb, server_jid, ver)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue