Title: Segfault from `unicodedata.iter_graphemes` on a free threaded build · Issue #145202 · python/cpython · GitHub
Open Graph Title: Segfault from `unicodedata.iter_graphemes` on a free threaded build · Issue #145202 · python/cpython
X Title: Segfault from `unicodedata.iter_graphemes` on a free threaded build · Issue #145202 · python/cpython
Description: Crash report What happened? A free-threaded build will segfault when calling unicodedata.iter_graphemes() and storing the result, even with PYTHON_GIL=0. import unicodedata res = unicodedata.iter_graphemes("a") Backtrace: Program receive...
Open Graph Description: Crash report What happened? A free-threaded build will segfault when calling unicodedata.iter_graphemes() and storing the result, even with PYTHON_GIL=0. import unicodedata res = unicodedata.iter_g...
X Description: Crash report What happened? A free-threaded build will segfault when calling unicodedata.iter_graphemes() and storing the result, even with PYTHON_GIL=0. import unicodedata res = unicodedata.iter_g...
Opengraph URL: https://github.com/python/cpython/issues/145202
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Segfault from `unicodedata.iter_graphemes` on a free threaded build","articleBody":"# Crash report\n\n### What happened?\n\nA free-threaded build will segfault when calling `unicodedata.iter_graphemes()` and storing the result, even with `PYTHON_GIL=0`.\n\n```python\nimport unicodedata\n\nres = unicodedata.iter_graphemes(\"a\")\n```\n\nBacktrace:\n```\nProgram received signal SIGSEGV, Segmentation fault.\nGBI_dealloc (self=0x20002ac2b60) at ./Modules/unicodedata.c:1992\n1992 Py_DECREF(((GraphemeBreakIterator *)self)-\u003eiter.str);\n\n#0 GBI_dealloc (self=0x20002ac2b60) at ./Modules/unicodedata.c:1992\n#1 0x000055555573b0b7 in _Py_Dealloc (op=0x20002ac2b60) at Objects/object.c:3271\n#2 0x000055555570cbce in Py_DECREF (lineno=513, op=0x20002ac2b60, filename=\u003coptimized out\u003e) at ./Include/refcount.h:356\n#3 Py_XDECREF (op=0x20002ac2b60) at ./Include/refcount.h:513\n#4 dictkeys_decref (dk=dk@entry=0x200020d4a10, use_qsbr=true) at Objects/dictobject.c:494\n#5 0x000055555571132b in clear_lock_held (op=op@entry=0x2000270ccd0) at Objects/dictobject.c:2998\n#6 0x0000555555711578 in PyDict_Clear (op=0x2000270ccd0) at Objects/dictobject.c:3027\n#7 0x00005555557174a9 in dict_tp_clear (op=0x20002ac2b60) at Objects/dictobject.c:4843\n#8 0x00005555558f5c61 in delete_garbage (state=0x7fffffffd5c0) at Python/gc_free_threading.c:1780\n#9 gc_collect_internal (interp=0x555555d33880 \u003c_PyRuntime+174016\u003e, state=0x7fffffffd5c0, generation=2) at Python/gc_free_threading.c:2375\n#10 gc_collect_main (tstate=0x555555d6bfd8 \u003c_PyRuntime+405272\u003e, generation=2, reason=_Py_GC_REASON_SHUTDOWN) at Python/gc_free_threading.c:2446\n#11 0x000055555594203e in finalize_modules (tstate=tstate@entry=0x555555d6bfd8 \u003c_PyRuntime+405272\u003e) at Python/pylifecycle.c:1793\n#12 0x000055555594081a in _Py_Finalize (runtime=\u003coptimized out\u003e) at Python/pylifecycle.c:2295\n#13 0x00005555559aa459 in Py_RunMain () at Modules/main.c:774\n#14 0x00005555559aafe1 in pymain_main (args=args@entry=0x7fffffffda40) at Modules/main.c:802\n#15 0x00005555559ab042 in Py_BytesMain (argc=\u003coptimized out\u003e, argv=0xffffffffffffffe8) at Modules/main.c:826\n#16 0x00007ffff7c2a575 in __libc_start_call_main (main=main@entry=0x5555555ed170 \u003cmain\u003e, argc=argc@entry=2, argv=argv@entry=0x7fffffffdb98) at ../sysdeps/nptl/libc_start_call_main.h:58\n#17 0x00007ffff7c2a628 in __libc_start_main_impl (main=0x5555555ed170 \u003cmain\u003e, argc=2, argv=0x7fffffffdb98, init=\u003coptimized out\u003e, fini=\u003coptimized out\u003e, rtld_fini=\u003coptimized out\u003e,\n stack_end=0x7fffffffdb88) at ../csu/libc-start.c:360\n#18 0x00005555555ed0a5 in _start ()\n```\n\nFound using [fusil](https://github.com/devdanzin/fusil) by @vstinner.\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.15.0a6+ free-threading build (heads/main:1ac9d138ae0, Feb 25 2026, 05:27:56) [Clang 21.1.2 (2ubuntu6)]\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-145203\n* gh-145216\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/devdanzin","@type":"Person","name":"devdanzin"},"datePublished":"2026-02-25T08:37:19.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/145202/cpython/issues/145202"}
| 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:87f68400-0c79-d9ae-3388-ca628e9f1af1 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BA12:1D90CC:5C89BD1:828B2F7:6A500C3F |
| html-safe-nonce | 957e0cdb6c1e0d2e03c4948f58f2a0073cfe1ecc06f6992fd501f8ae7b7f0f9a |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCQTEyOjFEOTBDQzo1Qzg5QkQxOjgyOEIyRjc6NkE1MDBDM0YiLCJ2aXNpdG9yX2lkIjoiODY2MTUyNjAwNzc3NjI4MzcxMSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 56c6d8754533fd66d0e55330318e8bc97262b3c4eea79ef8b2c7e4eb55b96eaf |
| hovercard-subject-tag | issue:3988001693 |
| 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/145202/issue_layout |
| twitter:image | https://opengraph.githubassets.com/bf77b628d0e44c5fd98c1c166494ef4b798bce72517a9a3629b4ed6dcb4a859b/python/cpython/issues/145202 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/bf77b628d0e44c5fd98c1c166494ef4b798bce72517a9a3629b4ed6dcb4a859b/python/cpython/issues/145202 |
| og:image:alt | Crash report What happened? A free-threaded build will segfault when calling unicodedata.iter_graphemes() and storing the result, even with PYTHON_GIL=0. import unicodedata res = unicodedata.iter_g... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | devdanzin |
| hostname | github.com |
| expected-hostname | github.com |
| None | 56eec25a3430492dd6ec2a480eb33256a0da5192d5714b0db4f5ab5f33203d94 |
| 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 | 93a615b89b7dcbdb6b678f4772931ecc28ada82a |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width