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:
Goffi 2026-06-07 21:20:05 +02:00
commit 29a39b771b
2 changed files with 8 additions and 2 deletions

View file

@ -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

View file

@ -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)