diff --git a/src/core/sat_main.py b/src/core/sat_main.py index ac424fc0..c7dfff25 100644 --- a/src/core/sat_main.py +++ b/src/core/sat_main.py @@ -288,7 +288,8 @@ class SAT(service.Service): log.error("error (plugin %(name)s): %(failure)s" % {'name': plugin_conn_cb[idx][0], 'failure': result}) - yield list_d.addCallback(logPluginResults) + yield list_d.addCallback(logPluginResults) # FIXME: we should have a timeout here, and a way to know if a plugin freeze + # TODO: mesure time to launch of each plugin def _authenticateProfile(self, password, profile): """Authenticate the profile. diff --git a/src/memory/disco.py b/src/memory/disco.py index c8e905ef..06868ef8 100755 --- a/src/memory/disco.py +++ b/src/memory/disco.py @@ -24,6 +24,7 @@ log = getLogger(__name__) from twisted.words.protocols.jabber import jid from twisted.words.protocols.jabber.error import StanzaError from twisted.internet import defer +from twisted.internet import reactor from sat.core.constants import Const as C from wokkel import disco from base64 import b64encode @@ -33,6 +34,7 @@ from hashlib import sha1 PRESENCE = '/presence' NS_ENTITY_CAPABILITY = 'http://jabber.org/protocol/caps' CAPABILITY_UPDATE = PRESENCE + '/c[@xmlns="' + NS_ENTITY_CAPABILITY + '"]' +TIMEOUT = 15 class HashGenerationError(Exception): pass @@ -169,6 +171,7 @@ class Discovery(object): d = self.getItems(jid_, profile_key) d.addCallback(gotItems) d.addCallback(lambda dummy: found_entities) + reactor.callLater(TIMEOUT, d.cancel) # FIXME: one bad service make a general timeout return d def findFeaturesSet(self, features, category=None, type_=None, jid_=None, profile_key=C.PROF_KEY_NONE): @@ -213,6 +216,7 @@ class Discovery(object): d = self.getItems(jid_, profile_key) d.addCallback(gotItems) d.addCallback(lambda dummy: found_entities) + reactor.callLater(TIMEOUT, d.cancel) # FIXME: one bad service make a general timeout return d def generateHash(self, services):