python3.10/00374-bpo-46070-fix-asyncio...

61 lines
2.0 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Miss Islington (bot)"
<31488909+miss-islington@users.noreply.github.com>
Date: Fri, 7 Jan 2022 06:35:15 -0800
Subject: [PATCH] 00374: bpo-46070: Fix asyncio initialisation guard
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 <erlend.aasland@innova.no>
Fixes https://bugzilla.redhat.com/2034962
---
.../Library/2022-01-07-13-51-22.bpo-46070.-axLUW.rst | 2 ++
Modules/_asynciomodule.c | 10 ++++------
2 files changed, 6 insertions(+), 6 deletions(-)
create mode 100644 Misc/NEWS.d/next/Library/2022-01-07-13-51-22.bpo-46070.-axLUW.rst
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 0000000000..0fedc9dfb8
--- /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 56079b0277..befec9a834 100644
--- a/Modules/_asynciomodule.c
+++ b/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;