Fix timeout management on message delivery

pull/8/head
Nicolas 2016-04-10 21:46:52 +02:00
rodzic 7a868bd66e
commit dd04b44a57
2 zmienionych plików z 8 dodań i 2 usunięć

Wyświetl plik

@ -330,7 +330,10 @@ class MQTTClient:
deliver_task = ensure_future(self._handler.mqtt_deliver_next_message(), loop=self._loop)
self.client_tasks.append(deliver_task)
self.logger.debug("Waiting message delivery")
yield from asyncio.wait([deliver_task], loop=self._loop, return_when=asyncio.FIRST_EXCEPTION, timeout=timeout)
done, pending = yield from asyncio.wait([deliver_task], loop=self._loop, return_when=asyncio.FIRST_EXCEPTION, timeout=timeout)
if pending:
#timeout occured before message received
deliver_task.cancel()
if deliver_task.exception():
raise deliver_task.exception()
self.client_tasks.pop()

Wyświetl plik

@ -454,7 +454,10 @@ class ProtocolHandler:
def mqtt_deliver_next_message(self):
if self.logger.isEnabledFor(logging.DEBUG):
self.logger.debug("%d message(s) available for delivery" % self.session.delivered_message_queue.qsize())
message = yield from self.session.delivered_message_queue.get()
try:
message = yield from self.session.delivered_message_queue.get()
except asyncio.CancelledError:
message = None
if self.logger.isEnabledFor(logging.DEBUG):
self.logger.debug("Delivering message %s" % message)
return message