From 6baacb2c23e974f6a4dcc6eb738192811f54693e Mon Sep 17 00:00:00 2001 From: Josh Date: Sat, 29 Aug 2020 13:12:07 +1000 Subject: [PATCH] [tasks] Don't update _next_iteration on retry --- discord/ext/tasks/__init__.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/discord/ext/tasks/__init__.py b/discord/ext/tasks/__init__.py index e54573ef2..b4e8f2b26 100644 --- a/discord/ext/tasks/__init__.py +++ b/discord/ext/tasks/__init__.py @@ -68,6 +68,7 @@ class Loop: raise ValueError('count must be greater than 0 or None.') self.change_interval(seconds=seconds, minutes=minutes, hours=hours) + self._last_iteration_failed = False self._last_iteration = None self._next_iteration = None @@ -88,18 +89,22 @@ class Loop: backoff = ExponentialBackoff() await self._call_loop_function('before_loop') sleep_until = discord.utils.sleep_until + self._last_iteration_failed = False self._next_iteration = datetime.datetime.now(datetime.timezone.utc) try: await asyncio.sleep(0) # allows canceling in before_loop while True: - self._last_iteration = self._next_iteration - self._next_iteration = self._get_next_sleep_time() + if not self._last_iteration_failed: + self._last_iteration = self._next_iteration + self._next_iteration = self._get_next_sleep_time() try: await self.coro(*args, **kwargs) + self._last_iteration_failed = False now = datetime.datetime.now(datetime.timezone.utc) if now > self._next_iteration: self._next_iteration = now except self._valid_exception as exc: + self._last_iteration_failed = True if not self.reconnect: raise await asyncio.sleep(backoff.delay())