From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Fri, 7 Jan 2022 14:36:07 +0000 (-0800) Subject: bpo-46070: Fix asyncio initialisation guard (GH-30423) X-Git-Tag: v3.9.10~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4d2cfd354969590ba8e0af0447fd84f8b5e61952;p=thirdparty%2FPython%2Fcpython.git 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 b127e70a8a682fe869c22ce04c379bd85a00db67) Co-authored-by: Erlend Egeberg Aasland --- diff --git a/Misc/NEWS.d/next/Library/2022-01-07-13-51-22.bpo-46070.-axLUW.rst b/Misc/NEWS.d/next/Library/2022-01-07-13-51-22.bpo-46070.-axLUW.rst new file mode 100644 index 000000000000..0fedc9dfb8fb --- /dev/null +++ b/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. diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 4457d7bd49e2..a1421cf5dbec 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -3328,17 +3328,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) { @@ -3399,6 +3396,7 @@ module_init(void) goto fail; } + module_initialized = 1; Py_DECREF(module); return 0;