bpo-46070: Fix asyncio initialisation guard (GH-30423)

If init flag is set, exit successfully immediately.
If not, only set the flag after successful initialization.
This commit is contained in:
Erlend Egeberg Aasland 2022-01-07 15:08:19 +01:00 committed by GitHub
parent 994f90c077
commit b127e70a8a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 6 deletions

View File

@ -0,0 +1,2 @@
Fix possible segfault when importing the :mod:`asyncio` module from
different sub-interpreters in parallel. Patch by Erlend E. Aasland.

View File

@ -3318,17 +3318,14 @@ static int
module_init(void)
{
PyObject *module = NULL;
if (module_initialized) {
return 0;
}
asyncio_mod = PyImport_ImportModule("asyncio");
if (asyncio_mod == NULL) {
goto fail;
}
if (module_initialized != 0) {
return 0;
}
else {
module_initialized = 1;
}
current_tasks = PyDict_New();
if (current_tasks == NULL) {
@ -3389,6 +3386,7 @@ module_init(void)
goto fail;
}
module_initialized = 1;
Py_DECREF(module);
return 0;