]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
gh-116322: Add Py_mod_gil module slot (#116882)
authorBrett Simmers <swtaarrs@users.noreply.github.com>
Fri, 3 May 2024 15:30:55 +0000 (08:30 -0700)
committerGitHub <noreply@github.com>
Fri, 3 May 2024 15:30:55 +0000 (11:30 -0400)
commitc2627d6eea924daf80f374c18a5fd73ef61283fa
tree91d94d70f490562b2773aadb49b8befee6354f75
parent3e818afb9b7c557aa633aeb3d5c4959750feeab0
gh-116322: Add Py_mod_gil module slot (#116882)

This PR adds the ability to enable the GIL if it was disabled at
interpreter startup, and modifies the multi-phase module initialization
path to enable the GIL when loading a module, unless that module's spec
includes a slot indicating it can run safely without the GIL.

PEP 703 called the constant for the slot `Py_mod_gil_not_used`; I went
with `Py_MOD_GIL_NOT_USED` for consistency with gh-104148.

A warning will be issued up to once per interpreter for the first
GIL-using module that is loaded. If `-v` is given, a shorter message
will be printed to stderr every time a GIL-using module is loaded
(including the first one that issues a warning).
123 files changed:
Doc/c-api/module.rst
Include/internal/pycore_moduleobject.h
Include/moduleobject.h
Lib/test/test_importlib/extension/_test_nonmodule_cases.py [new file with mode: 0644]
Lib/test/test_importlib/extension/test_loader.py
Lib/test/test_sys.py
Misc/NEWS.d/next/Core and Builtins/2024-03-12-13-51-09.gh-issue-116322.q8TcDQ.rst [new file with mode: 0644]
Modules/_abc.c
Modules/_asynciomodule.c
Modules/_bisectmodule.c
Modules/_blake2/blake2module.c
Modules/_bz2module.c
Modules/_codecsmodule.c
Modules/_collectionsmodule.c
Modules/_contextvarsmodule.c
Modules/_csv.c
Modules/_ctypes/_ctypes.c
Modules/_ctypes/_ctypes_test.c
Modules/_curses_panel.c
Modules/_cursesmodule.c
Modules/_datetimemodule.c
Modules/_dbmmodule.c
Modules/_decimal/_decimal.c
Modules/_elementtree.c
Modules/_functoolsmodule.c
Modules/_gdbmmodule.c
Modules/_hashopenssl.c
Modules/_heapqmodule.c
Modules/_interpchannelsmodule.c
Modules/_interpqueuesmodule.c
Modules/_interpretersmodule.c
Modules/_io/_iomodule.c
Modules/_json.c
Modules/_localemodule.c
Modules/_lsprof.c
Modules/_lzmamodule.c
Modules/_multiprocessing/multiprocessing.c
Modules/_multiprocessing/posixshmem.c
Modules/_opcode.c
Modules/_operator.c
Modules/_pickle.c
Modules/_posixsubprocess.c
Modules/_queuemodule.c
Modules/_randommodule.c
Modules/_scproxy.c
Modules/_sqlite/module.c
Modules/_sre/sre.c
Modules/_ssl.c
Modules/_stat.c
Modules/_statisticsmodule.c
Modules/_struct.c
Modules/_suggestions.c
Modules/_sysconfig.c
Modules/_testbuffer.c
Modules/_testcapimodule.c
Modules/_testclinic.c
Modules/_testclinic_limited.c
Modules/_testexternalinspection.c
Modules/_testimportmultiple.c
Modules/_testinternalcapi.c
Modules/_testlimitedcapi.c
Modules/_testmultiphase.c
Modules/_testsinglephase.c
Modules/_threadmodule.c
Modules/_tkinter.c
Modules/_tracemalloc.c
Modules/_typingmodule.c
Modules/_uuidmodule.c
Modules/_weakref.c
Modules/_winapi.c
Modules/_xxtestfuzz/_xxtestfuzz.c
Modules/_zoneinfo.c
Modules/arraymodule.c
Modules/atexitmodule.c
Modules/binascii.c
Modules/cjkcodecs/cjkcodecs.h
Modules/cjkcodecs/multibytecodec.c
Modules/cmathmodule.c
Modules/errnomodule.c
Modules/faulthandler.c
Modules/fcntlmodule.c
Modules/gcmodule.c
Modules/grpmodule.c
Modules/itertoolsmodule.c
Modules/mathmodule.c
Modules/md5module.c
Modules/mmapmodule.c
Modules/overlapped.c
Modules/posixmodule.c
Modules/pwdmodule.c
Modules/pyexpat.c
Modules/readline.c
Modules/resource.c
Modules/selectmodule.c
Modules/sha1module.c
Modules/sha2module.c
Modules/sha3module.c
Modules/signalmodule.c
Modules/socketmodule.c
Modules/symtablemodule.c
Modules/syslogmodule.c
Modules/termios.c
Modules/timemodule.c
Modules/unicodedata.c
Modules/xxlimited.c
Modules/xxlimited_35.c
Modules/xxmodule.c
Modules/xxsubtype.c
Modules/zlibmodule.c
Objects/moduleobject.c
Objects/unicodeobject.c
PC/_testconsole.c
PC/msvcrtmodule.c
PC/winreg.c
PC/winsound.c
Parser/asdl_c.py
Python/Python-ast.c
Python/Python-tokenize.c
Python/_warnings.c
Python/bltinmodule.c
Python/import.c
Python/marshal.c
Python/sysmodule.c