[New-bugs-announce] [issue43991] asyncio lock does not get released after task is canceled

Alexander Niederbühl report at bugs.python.org
Fri Apr 30 14:49:44 EDT 2021


New submission from Alexander Niederbühl <a.niederbuehl at gmail.com>:

If a task gets canceled while holding a lock, the lock is not automatically released. Is that expected, it seems like it could cause a deadlock?

Failing test adapted from Lib/test/test_asyncio/test_locks.py (commit 6bd9288b80):

    def test_acquire_cancel(self):
        lock = asyncio.Lock()
        self.assertTrue(self.loop.run_until_complete(lock.acquire()))

        task = self.loop.create_task(lock.acquire())
        self.loop.call_soon(task.cancel)
        self.assertRaises(
            asyncio.CancelledError,
            self.loop.run_until_complete, task)
        self.assertFalse(lock._waiters)

        # Should the lock get released after cancellation?
        self.assertFalse(lock.locked())

I stumbled upon this while playing around with TLA+.

----------
components: asyncio
messages: 392499
nosy: a.niederbuehl, asvetlov, yselivanov
priority: normal
severity: normal
status: open
title: asyncio lock does not get released after task is canceled
type: behavior

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue43991>
_______________________________________


More information about the New-bugs-announce mailing list