Title: Race in `_PyFreeList_Push` · Issue #127879 · python/cpython · GitHub
Open Graph Title: Race in `_PyFreeList_Push` · Issue #127879 · python/cpython
X Title: Race in `_PyFreeList_Push` · Issue #127879 · python/cpython
Description: Bug report Seen in https://github.com/python/cpython/actions/runs/12216713951/job/34310688405?pr=126865: Reported by @markshannon ================== WARNING: ThreadSanitizer: data race (pid=20210) Write of size 8 at 0x7fbb3e0415f0 by thr...
Open Graph Description: Bug report Seen in https://github.com/python/cpython/actions/runs/12216713951/job/34310688405?pr=126865: Reported by @markshannon ================== WARNING: ThreadSanitizer: data race (pid=20210) ...
X Description: Bug report Seen in https://github.com/python/cpython/actions/runs/12216713951/job/34310688405?pr=126865: Reported by @markshannon ================== WARNING: ThreadSanitizer: data race (pid=20210) ...
Opengraph URL: https://github.com/python/cpython/issues/127879
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Race in `_PyFreeList_Push`","articleBody":"# Bug report\n\nSeen in https://github.com/python/cpython/actions/runs/12216713951/job/34310688405?pr=126865:\n\nReported by @markshannon \n\n```\n==================\nWARNING: ThreadSanitizer: data race (pid=20210)\n Write of size 8 at 0x7fbb3e0415f0 by thread T31:\n #0 _PyFreeList_Push /home/runner/work/cpython/cpython/./Include/internal/pycore_freelist.h:54:23 (python+0x2cbe10) (BuildId: 7dc3814d1a5683dfc5de7e8c3c8846a47a478499)\n #1 _PyFreeList_Free /home/runner/work/cpython/cpython/./Include/internal/pycore_freelist.h:67:10 (python+0x2cbe10)\n #2 long_dealloc /home/runner/work/cpython/cpython/Objects/longobject.c:3667:[13](https://github.com/python/cpython/actions/runs/12216713951/job/34310688405?pr=126865#step:13:14) (python+0x2cbe10)\n #3 _Py_Dealloc /home/runner/work/cpython/cpython/Objects/object.c:2977:5 (python+0x3186c4) (BuildId: 7dc3814d1a5683dfc5de7e8c3c8846a47a478499)\n #4 _Py_MergeZeroLocalRefcount /home/runner/work/cpython/cpython/Objects/object.c (python+0x318d15) (BuildId: 7dc38[14](https://github.com/python/cpython/actions/runs/12216713951/job/34310688405?pr=126865#step:13:15)d1a5683dfc5de7e8c3c8846a47a478499)\n #5 Py_DECREF /home/runner/work/cpython/cpython/./Include/refcount.h:323:13 (python+0x5ea28e) (BuildId: 7dc3814d1a5683dfc5de7e8c3c8846a47a478499)\n #6 Py_XDECREF /home/runner/work/cpython/cpython/./Include/refcount.h:476:9 (python+0x5ea28e)\n #7 PyMember_SetOne /home/runner/work/cpython/cpython/Python/structmember.c:315:9 \n...\n\nPrevious atomic read of size 8 at 0x7fbb3e0415f0 by thread T32:\n #0 _Py_atomic_load_uintptr_relaxed /home/runner/work/cpython/cpython/./Include/cpython/pyatomic_gcc.h:375:10 (python+0x5e96b9) (BuildId: 7dc[38](https://github.com/python/cpython/actions/runs/12216713951/job/34310688405?pr=126865#step:13:39)14d1a5683dfc5de7e8c3c8846a47a478499)\n #1 _Py_IsOwnedByCurrentThread /home/runner/work/cpython/cpython/./Include/object.h:242:12 (python+0x5e96b9)\n #2 _Py_TryIncrefFast /home/runner/work/cpython/cpython/./Include/internal/pycore_object.h:547:9 (python+0x5e96b9)\n #3 _Py_TryIncrefCompare /home/runner/work/cpython/cpython/./Include/internal/pycore_object.h:586:9 (python+0x5e96b9)\n #4 PyMember_GetOne /home/runner/work/cpython/cpython/Python/structmember.c:99:18 (python+0x5e93d5) (BuildId: 7dc3814d1a5683dfc5de7e8c3c8846a47a478499)\n #5 member_get /home/runner/work/cpython/cpython/Objects/descrobject.c:179:12 (python+0x268c59) (BuildId: 7dc3814d1a5683dfc5de7e8c3c8846a47a478499)\n #6 _PyObject_GenericGetAttrWithDict /home/runner/work/cpython/cpython/Objects/object.c:1690:19 (python+0x31d32b) (BuildId: 7dc3814d1a5683dfc5de7e8c3c8846a47a478499)\n #7 PyObject_GenericGetAttr /home/runner/work/cpython/cpython/Objects/object.c:1772:12 (python+0x31d1[44](https://github.com/python/cpython/actions/runs/12216713951/job/34310688405?pr=126865#step:13:45)) (BuildId: 7dc3814d1a5683dfc5de7e8c3c8846a47a478499)\n #8 PyObject_GetAttr /home/runner/work/cpython/cpython/Objects/object.c:1286:18 (python+0x31c6da) (BuildId: 7dc3814d1a5683dfc5de7e8c3c8846a47a478499)\n #9 _PyEval_EvalFrameDefault /home/runner/work/cpython/cpython/Python/generated_cases.c.h:5254:30 (python+0x4da626) (BuildId: 7dc3814d1a5683dfc5de7e8c3c88\n```\n\nWe should be using a relaxed atomic write in pycore_freelist.h.\n\nThe background is that we have a few places (dict, list, structmember) that have a fast-path that attempts to avoid a lock. (https://peps.python.org/pep-0703/#optimistically-avoiding-locking). They may access the ob_tid and refcount fields while the object is freed (but the memory is still valid).\n\nThe freelist overwrites the first field (ob_tid in the free threading build). That's okay semantically because valid pointers are distinct from the thread ids we use for ob_tid (the GC also relies on this property). However, we still need to use an atomic operation (relaxed is fine here) when we write the field.\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-127880\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/colesbury","@type":"Person","name":"colesbury"},"datePublished":"2024-12-12T17:28:19.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/127879/cpython/issues/127879"}
| 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:b8ce6e4e-277c-a79e-81a0-f8d8f71c1cf7 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | CFDC:8D142:1527879:1C26771:696ADC9C |
| html-safe-nonce | 6bd8dbb0ab91a921abb0a510c5c4598408ccb2b108af3152b67643c56753f787 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDRkRDOjhEMTQyOjE1Mjc4Nzk6MUMyNjc3MTo2OTZBREM5QyIsInZpc2l0b3JfaWQiOiI5MDQ4NjkwNTAzMzQyMzk5MDAiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | ad9a9dada31da9082f53898019b2cd52d49d2b5483d0a00c94a03fb7d31a941c |
| hovercard-subject-tag | issue:2736499442 |
| 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/127879/issue_layout |
| twitter:image | https://opengraph.githubassets.com/40dafaedb687d54dac1fdee5ce5e996319d031d0ee75f74fe6b7e0697ad596c3/python/cpython/issues/127879 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/40dafaedb687d54dac1fdee5ce5e996319d031d0ee75f74fe6b7e0697ad596c3/python/cpython/issues/127879 |
| og:image:alt | Bug report Seen in https://github.com/python/cpython/actions/runs/12216713951/job/34310688405?pr=126865: Reported by @markshannon ================== WARNING: ThreadSanitizer: data race (pid=20210) ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | colesbury |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5f99f7c1d70f01da5b93e5ca90303359738944d8ab470e396496262c66e60b8d |
| 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 | 524a93f2c1f36522a3b4be4c110467ee4172245d |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width