Browse Source

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.
(cherry picked from commit b127e70a8a)

Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@innova.no>
pull/30459/head
Miss Islington (bot) 4 years ago
committed by GitHub
parent
commit
9d18045804
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      Misc/NEWS.d/next/Library/2022-01-07-13-51-22.bpo-46070.-axLUW.rst
  2. 10
      Modules/_asynciomodule.c

2
Misc/NEWS.d/next/Library/2022-01-07-13-51-22.bpo-46070.-axLUW.rst

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

10
Modules/_asynciomodule.c

@ -3309,17 +3309,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) {
@ -3380,6 +3377,7 @@ module_init(void)
goto fail;
}
module_initialized = 1;
Py_DECREF(module);
return 0;

Loading…
Cancel
Save