Title: asyncio queue: get/put will not awaken next if interrupted · Issue #108042 · python/cpython · GitHub
Open Graph Title: asyncio queue: get/put will not awaken next if interrupted · Issue #108042 · python/cpython
X Title: asyncio queue: get/put will not awaken next if interrupted · Issue #108042 · python/cpython
Description: Checklist I am confident this is a bug in CPython, not a bug in a third-party project I have searched the CPython issue tracker, and am confident this bug has not been reported before CPython versions tested on: CPython main branch Opera...
Open Graph Description: Checklist I am confident this is a bug in CPython, not a bug in a third-party project I have searched the CPython issue tracker, and am confident this bug has not been reported before CPython versi...
X Description: Checklist I am confident this is a bug in CPython, not a bug in a third-party project I have searched the CPython issue tracker, and am confident this bug has not been reported before CPython versi...
Opengraph URL: https://github.com/python/cpython/issues/108042
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"asyncio queue: get/put will not awaken next if interrupted","articleBody":"### Checklist\n\n- [X] I am confident this is a bug in CPython, not a bug in a third-party project\n- [X] I have searched the [CPython issue tracker](https://github.com/python/cpython/issues?q=is%3Aissue+sort%3Acreated-desc),\nand am confident this bug has not been reported before\n\n\n### CPython versions tested on:\n\nCPython main branch\n\n### Operating systems tested on:\n\nLinux\n\n### Output from running 'python -VV' on the command line:\n\nPython 3.11.4 (main, Jun 9 2023, 07:59:55) [GCC 12.3.0]\n\n### A clear and concise description of the bug:\n\nIf the current putter has an exception thrown (such as when the task awaiting put() has an exception thrown) and the queue isn't full (which can happen if another task put()s before the current task is rewoken), then the queue must wake up the next putter, because otherwise nothing else will wake up the next putter. This line is responsible for this:\r\nhttps://github.com/python/cpython/blob/42429d3b9adb8af1eadcfa155f6e8422a254ec67/Lib/asyncio/queues.py#L130\r\n\r\nUnfortunately that condition - specifically `not putter.cancelled()` - will never be met because just before, this:\r\nhttps://github.com/python/cpython/blob/42429d3b9adb8af1eadcfa155f6e8422a254ec67/Lib/asyncio/queues.py#L122\r\n\r\nThis affects both `put()` and `get()`. I propose moving `cancel()` to just before the `raise`.\r\n\r\nThere is no test case - this is something I noticed while reading `asyncio/queue.py`.\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-108066\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/orbisvicis","@type":"Person","name":"orbisvicis"},"datePublished":"2023-08-16T16:33:33.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":6},"url":"https://github.com/108042/cpython/issues/108042"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:9fdefe5e-ca37-da19-fade-9c6f3f731373 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C5C2:163D9C:101778:15A6CD:6A5161C0 |
| html-safe-nonce | 4d2a0ed47e2cc7481c14ce0cd3c5edec09e13c7d22e1fbfc221c385278c9ac3c |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDNUMyOjE2M0Q5QzoxMDE3Nzg6MTVBNkNEOjZBNTE2MUMwIiwidmlzaXRvcl9pZCI6IjYwNzkzODg0NDI3NzQzMjc2OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 3a5e2576db8da4714d0928ded3041eecd3bb9661199daea5bb6083798db657eb |
| hovercard-subject-tag | issue:1853573161 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/108042/issue_layout |
| twitter:image | https://opengraph.githubassets.com/10630ed2fc0bad8439ff6f05178e89eb627e30cccf4fab7d3a87c0a6b0b7d0da/python/cpython/issues/108042 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/10630ed2fc0bad8439ff6f05178e89eb627e30cccf4fab7d3a87c0a6b0b7d0da/python/cpython/issues/108042 |
| og:image:alt | Checklist I am confident this is a bug in CPython, not a bug in a third-party project I have searched the CPython issue tracker, and am confident this bug has not been reported before CPython versi... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | orbisvicis |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 2eeb434949a926fad21064b4d395a54759f7a0b2 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width