https://github.com/python/cpython/commit/990bcd9abdd1063dc90d8f182b6f85b1d8149bb8
commit: 990bcd9abdd1063dc90d8f182b6f85b1d8149bb8
branch: main
author: Jelle Zijlstra <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2026-10-20T21:31:44-07:00
summary:
gh-159739: Collect grapheme iterator and segment type cycles (#159975)
Backport to 3.15.
files:
A Misc/NEWS.d/next/Library/2026-10-20-00-00-00.gh-issue-159739.0c4ae9.rst
M Modules/unicodedata.c
diff --git
a/Misc/NEWS.d/next/Library/2026-10-20-00-00-00.gh-issue-159739.0c4ae9.rst
b/Misc/NEWS.d/next/Library/2026-10-20-00-00-00.gh-issue-159739.0c4ae9.rst
new file mode 100644
index 00000000000000..3392832f714adc
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-10-20-00-00-00.gh-issue-159739.0c4ae9.rst
@@ -0,0 +1,2 @@
+Fix reference cycles involving the types of grapheme iterators and segments
+created by :func:`unicodedata.iter_graphemes`.
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index 9bd3639d9c3f41..811d6af7220a73 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -1989,6 +1989,7 @@ Segment_dealloc(PyObject *self)
static int
Segment_traverse(PyObject *self, visitproc visit, void *arg)
{
+ Py_VISIT(Py_TYPE(self));
Py_VISIT(((SegmentObject *)self)->string);
return 0;
}
@@ -2057,6 +2058,7 @@ GBI_dealloc(PyObject *self)
static int
GBI_traverse(PyObject *self, visitproc visit, void *arg)
{
+ Py_VISIT(Py_TYPE(self));
Py_VISIT(((GraphemeBreakIterator *)self)->iter.str);
return 0;
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]