iq: only update the future if it is not done

This commit is contained in:
mathieui 2021-01-22 22:55:39 +01:00
parent b784b68bcd
commit 3f10dfe138

View File

@ -194,9 +194,11 @@ class Iq(RootStanza):
def callback_success(result): def callback_success(result):
type_ = result['type'] type_ = result['type']
if type_ == 'result': if type_ == 'result':
future.set_result(result) if not future.done():
future.set_result(result)
elif type_ == 'error': elif type_ == 'error':
future.set_exception(IqError(result)) if not future.done():
future.set_exception(IqError(result))
else: else:
# Most likely an iq addressed to ourself, rearm the callback. # Most likely an iq addressed to ourself, rearm the callback.
handler = constr(handler_name, handler = constr(handler_name,
@ -212,7 +214,8 @@ class Iq(RootStanza):
callback(result) callback(result)
def callback_timeout(): def callback_timeout():
future.set_exception(IqTimeout(self)) if not future.done():
future.set_exception(IqTimeout(self))
self.stream.remove_handler('IqCallback_%s' % self['id']) self.stream.remove_handler('IqCallback_%s' % self['id'])
if timeout_callback is not None: if timeout_callback is not None:
timeout_callback(self) timeout_callback(self)