Skip to content

Add a mechanism for single-phase init modules to declare free-threading compatibility #117526

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
swtaarrs opened this issue Apr 3, 2024 · 1 comment
Assignees
Labels
extension-modules C modules in the Modules dir topic-free-threading type-feature A feature request or enhancement

Comments

@swtaarrs
Copy link
Member

swtaarrs commented Apr 3, 2024

Feature or enhancement

Proposal:

gh-116322 only works for modules using multi-phase init; we need an alternative mechanism for for single-phase init modules since they can't provide m_slots.

We originally considered indicating compatibility in the symbol table of the .so containing the module, either by the presence of a magic symbol, or by providing an alternate init function with a PyInitT_ prefix. As pointed out by @Yhg1s in Discord, that solution doesn't work with modules added to inittab.

The current proposal is:

  • Before calling any module init function, enable the GIL if it is disabled (this will most likely be done as part of gh-116322: Add Py_mod_gil module slot #116882).
  • In free-threaded builds, add a void *md_gil member to PyModuleObject. It defaults to Py_MOD_GIL_USED (the same constant from Allow C extensions to declare compatibility with free-threading #116322).
  • Introduce a new public C API function PyModule_SetGIL(PyObject *mod, void *gil). If a single-phase init module can run without the GIL, it will call PyModule_SetGIL(mod, Py_MOD_GIL_NOT_USED) in its init function. This function will be a no-op in normal builds, and will set md_gil to its argument in free-threaded builds.
  • After the init function returns, if the module's md_gil member is set to Py_MOD_GIL_NOT_USED and the GIL was disabled before calling the init function, disable the GIL.
@swtaarrs swtaarrs added type-feature A feature request or enhancement topic-free-threading labels Apr 3, 2024
@Eclips4 Eclips4 added the extension-modules C modules in the Modules dir label Apr 4, 2024
@swtaarrs swtaarrs self-assigned this Apr 5, 2024
@swtaarrs
Copy link
Member Author

swtaarrs commented May 2, 2024

Closing this to consolidate in gh-116322 (there has also been some relevant discussion in this thread).

@swtaarrs swtaarrs closed this as completed May 2, 2024
@swtaarrs swtaarrs closed this as not planned Won't fix, can't repro, duplicate, stale May 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
extension-modules C modules in the Modules dir topic-free-threading type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

2 participants