From faffc8eeb2ca06cae60b726fa873e474a51ac39b Mon Sep 17 00:00:00 2001 From: Dan Hess Date: Sat, 26 Dec 2020 19:58:58 -0600 Subject: [PATCH] [commands] Correct concurrency never releasing during prepare call --- discord/ext/commands/core.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py index 4f36ab9a9..248a0e143 100644 --- a/discord/ext/commands/core.py +++ b/discord/ext/commands/core.py @@ -781,14 +781,19 @@ class Command(_BaseCommand): if self._max_concurrency is not None: await self._max_concurrency.acquire(ctx) - if self.cooldown_after_parsing: - await self._parse_arguments(ctx) - self._prepare_cooldowns(ctx) - else: - self._prepare_cooldowns(ctx) - await self._parse_arguments(ctx) + try: + if self.cooldown_after_parsing: + await self._parse_arguments(ctx) + self._prepare_cooldowns(ctx) + else: + self._prepare_cooldowns(ctx) + await self._parse_arguments(ctx) - await self.call_before_hooks(ctx) + await self.call_before_hooks(ctx) + except: + if self._max_concurrency is not None: + await self._max_concurrency.release(ctx) + raise def is_on_cooldown(self, ctx): """Checks whether the command is currently on cooldown.