Title: Crash at finalization after fail to start new thread · Issue #109746 · python/cpython · GitHub
Open Graph Title: Crash at finalization after fail to start new thread · Issue #109746 · python/cpython
X Title: Crash at finalization after fail to start new thread · Issue #109746 · python/cpython
Description: Crash report What happened? Bisected to e11fc03, but I guess this issue exists longer, and assertion that is added to PyThreadState_Clear by this commit just made it visible. import resource import threading # this isn't essential, but h...
Open Graph Description: Crash report What happened? Bisected to e11fc03, but I guess this issue exists longer, and assertion that is added to PyThreadState_Clear by this commit just made it visible. import resource import...
X Description: Crash report What happened? Bisected to e11fc03, but I guess this issue exists longer, and assertion that is added to PyThreadState_Clear by this commit just made it visible. import resource import...
Opengraph URL: https://github.com/python/cpython/issues/109746
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Crash at finalization after fail to start new thread","articleBody":"# Crash report\n\n### What happened?\n\nBisected to e11fc032a75d067d2167a21037722a770b9dfb51, but I guess this issue exists longer, and assertion that is added to `PyThreadState_Clear` by this commit just made it visible.\n```python\nimport resource\nimport threading\n\n# this isn't essential, but helps PyThread_start_new_thread() fail\nresource.setrlimit(resource.RLIMIT_NPROC, (150, 150))\n\nwhile True:\n t = threading.Thread()\n t.start()\n t.join()\n```\n\nError message with backtrace:\n```c++\nTraceback (most recent call last):\n File \"/home/radislav/projects/cpython/thread_repro.py\", line 10, in \u003cmodule\u003e\n t.start()\n File \"/home/radislav/projects/cpython/Lib/threading.py\", line 978, in start\n _start_new_thread(self._bootstrap, ())\nRuntimeError: can't start new thread\npython: Python/pystate.c:1484: PyThreadState_Clear: Assertion `tstate-\u003e_status.initialized \u0026\u0026 !tstate-\u003e_status.cleared' failed.\n\nProgram received signal SIGABRT, Aborted.\n__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50\n50\t../sysdeps/unix/sysv/linux/raise.c: No such file or directory.\n(gdb) bt\n#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50\n#1 0x00007ffff7c87537 in __GI_abort () at abort.c:79\n#2 0x00007ffff7c8740f in __assert_fail_base (fmt=0x7ffff7dfe688 \"%s%s%s:%u: %s%sAssertion `%s' failed.\\n%n\", \n assertion=0x5555559c7be0 \"tstate-\u003e_status.initialized \u0026\u0026 !tstate-\u003e_status.cleared\", file=0x5555559c6e2f \"Python/pystate.c\", line=1484, function=\u003coptimized out\u003e)\n at assert.c:92\n#3 0x00007ffff7c96662 in __GI___assert_fail (assertion=assertion@entry=0x5555559c7be0 \"tstate-\u003e_status.initialized \u0026\u0026 !tstate-\u003e_status.cleared\", \n file=file@entry=0x5555559c6e2f \"Python/pystate.c\", line=line@entry=1484, function=function@entry=0x5555559c83e0 \u003c__PRETTY_FUNCTION__.47\u003e \"PyThreadState_Clear\")\n at assert.c:101\n#4 0x000055555587075f in PyThreadState_Clear (tstate=tstate@entry=0x555555c4be00) at Python/pystate.c:1484\n#5 0x0000555555871483 in _PyThreadState_DeleteExcept (tstate=tstate@entry=0x555555c03338 \u003c_PyRuntime+508728\u003e) at Python/pystate.c:1680\n#6 0x000055555586afa4 in Py_FinalizeEx () at Python/pylifecycle.c:1831\n#7 0x000055555589f6fc in Py_RunMain () at Modules/main.c:691\n#8 0x000055555589f74b in pymain_main (args=args@entry=0x7fffffffe160) at Modules/main.c:719\n#9 0x000055555589f7c0 in Py_BytesMain (argc=\u003coptimized out\u003e, argv=\u003coptimized out\u003e) at Modules/main.c:743\n#10 0x00005555555cf74e in main (argc=\u003coptimized out\u003e, argv=\u003coptimized out\u003e) at ./Programs/python.c:15\n```\n \nWhen trying to start a new thread, Python creates new thread state by `_PyThreadState_New` call, adding this new state to list of thread states for current interpreter:\nhttps://github.com/python/cpython/blob/c32abf1f21c4bd32abcefe4d601611b152568961/Modules/_threadmodule.c#L1191\nIf consequent call to `PyThread_start_new_thread` fails, this new state gets cleared, but remains in list:\nhttps://github.com/python/cpython/blob/c32abf1f21c4bd32abcefe4d601611b152568961/Modules/_threadmodule.c#L1203-L1209\nThen, at Python finalization, call to `_PyThreadState_DeleteExcept` attempts to clear this thread state again, which causes assertion failure:\nhttps://github.com/python/cpython/blob/3e8fcb7df74248530c4280915c77e69811f69c3f/Python/pystate.c#L1674-L1682\n\ncc @ericsnowcurrently\n\n### CPython versions tested on:\n\n3.12, CPython main branch\n\n### Operating systems tested on:\n\nLinux\n\n### Output from running 'python -VV' on the command line:\n\nPython 3.13.0a0 (heads/main:d4cea794a7, Sep 22 2023, 18:42:05) [GCC 10.2.1 20210110]\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-109761\n* gh-127171\n* gh-127173\n* gh-127299\n* gh-127323\n* gh-127324\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/chgnrdv","@type":"Person","name":"chgnrdv"},"datePublished":"2023-09-22T15:48:49.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":4},"url":"https://github.com/109746/cpython/issues/109746"}
| 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:79a77896-6964-2017-b1de-312997c341a0 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BE62:CD74F:41C6D53:5CFCB1A:6A56D072 |
| html-safe-nonce | 94c696c5ad2abfdcb82bf5d25a9099ec48233e27fd5b98bc084ced109fd24a49 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCRTYyOkNENzRGOjQxQzZENTM6NUNGQ0IxQTo2QTU2RDA3MiIsInZpc2l0b3JfaWQiOiI1Mjc4MzM0MDk3ODE5MDk1MTU1IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 97b7ce3656fc1559b4e42614a2c4ddcf05db6d29f8db1b7aedadfc94eba97bea |
| hovercard-subject-tag | issue:1909148991 |
| 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/109746/issue_layout |
| twitter:image | https://opengraph.githubassets.com/7c59e66a2a207252880bf3484834618176deb85c4109d3d8b675faf3e9fef62d/python/cpython/issues/109746 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/7c59e66a2a207252880bf3484834618176deb85c4109d3d8b675faf3e9fef62d/python/cpython/issues/109746 |
| og:image:alt | Crash report What happened? Bisected to e11fc03, but I guess this issue exists longer, and assertion that is added to PyThreadState_Clear by this commit just made it visible. import resource import... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | chgnrdv |
| hostname | github.com |
| expected-hostname | github.com |
| None | df99b7164e1d961b639cf5d3cbd6b5ba673edc67bd7e47cdc4746b96099e11ae |
| 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 | 3146ab55fc8763ab0e1d2a875e600b3a545bc751 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width