Skip to content

[3.14] gh-153056: Fix a data race compiling the string.Template pattern in free-threading builds (GH-153057)#153303

Open
miss-islington wants to merge 1 commit into
python:3.14from
miss-islington:backport-4572903-3.14
Open

[3.14] gh-153056: Fix a data race compiling the string.Template pattern in free-threading builds (GH-153057)#153303
miss-islington wants to merge 1 commit into
python:3.14from
miss-islington:backport-4572903-3.14

Conversation

@miss-islington

Copy link
Copy Markdown
Contributor

Template compiles its substitution pattern lazily and caches it on the class. On the free-threaded build two concurrent first uses could race: a thread that observed the pattern another thread had just compiled would try to recompile it, and re.compile() rejects flags on an already-compiled pattern, raising a spurious ValueError. Return the already-compiled pattern instead.

As a side effect, a subclass that supplies an already-compiled pattern now works too; previously it raised the same ValueError at class definition.

  • Trim test comments and NEWS wording

  • Document that the pattern attribute accepts a string or a compiled regex

  • Comment the three states of pattern and note the documented-behavior fix in NEWS

  • Update Doc/library/string.rst


(cherry picked from commit 4572903)

Co-authored-by: tonghuaroot (童话) tonghuaroot@gmail.com
Co-authored-by: Barry Warsaw barry@python.org

…n in free-threading builds (pythonGH-153057)

* pythongh-153056: Fix a data race compiling the string.Template pattern in free-threading builds

Template compiles its substitution pattern lazily and caches it on the class.  On the free-threaded build two concurrent first uses could race: a thread that observed the pattern another thread had just compiled would try to recompile it, and re.compile() rejects flags on an already-compiled pattern, raising a spurious ValueError.  Return the already-compiled pattern instead.

As a side effect, a subclass that supplies an already-compiled pattern now works too; previously it raised the same ValueError at class definition.

* Trim test comments and NEWS wording

* Document that the pattern attribute accepts a string or a compiled regex

* Comment the three states of pattern and note the documented-behavior fix in NEWS

* Update Doc/library/string.rst

---------
(cherry picked from commit 4572903)

Co-authored-by: tonghuaroot (童话) <tonghuaroot@gmail.com>
Co-authored-by: Barry Warsaw <barry@python.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants