Skip to content

Make _struct module thread-safe in --disable-gil builds #112062

Closed
@colesbury

Description

@colesbury

Feature or enhancement

The _struct module has a few small issues:

  • The use of PyDict_GetItemWithError returns a borrowed reference (should use PyDict_GetItemRef)
  • The state->cache is lazily created; we should instead create it during _structmodule_exec
  • We want state->cache to be an immutable reference to a mutable dict. (The dict will be thread-safe.) Use PyDict_Clear to empty the dict instead of clearing the reference.

See the commit from the nogil-3.12 fork for context: colesbury/nogil-3.12@ada9b73feb. Note that in CPython the relevant function is PyDict_GetItemRef not PyDict_FetchItemWithError.

Linked PRs

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions