diff options
author | chgnrdv <52372310+chgnrdv@users.noreply.github.com> | 2023-06-04 04:06:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-04 04:06:45 (GMT) |
commit | ce558e69d4087dd3653207de78345fbb8a2c7835 (patch) | |
tree | a96a5b705ac12fced6d95ca55787d270550edbf8 /Modules/_threadmodule.c | |
parent | eaff9c39aa1a70d401521847cc35bec883ae9772 (diff) | |
download | cpython-ce558e69d4087dd3653207de78345fbb8a2c7835.zip cpython-ce558e69d4087dd3653207de78345fbb8a2c7835.tar.gz cpython-ce558e69d4087dd3653207de78345fbb8a2c7835.tar.bz2 |
gh-104690 Disallow thread creation and fork at interpreter finalization (#104826)
Disallow thread creation and fork at interpreter finalization.
in the following functions, check if interpreter is finalizing and raise `RuntimeError` with appropriate message:
* `_thread.start_new_thread` and thus `threading`
* `posix.fork`
* `posix.fork1`
* `posix.forkpty`
* `_posixsubprocess.fork_exec` when a `preexec_fn=` is supplied.
---------
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Gregory P. Smith <greg@krypto.org>
Diffstat (limited to 'Modules/_threadmodule.c')
-rw-r--r-- | Modules/_threadmodule.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 5d753b4..b6f878e 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -1155,6 +1155,11 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs) "thread is not supported for isolated subinterpreters"); return NULL; } + if (interp->finalizing) { + PyErr_SetString(PyExc_RuntimeError, + "can't create new thread at interpreter shutdown"); + return NULL; + } struct bootstate *boot = PyMem_NEW(struct bootstate, 1); if (boot == NULL) { |