summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/Library/2024-02-12-11-42-48.gh-issue-103092.sGMKr0.rst1
-rw-r--r--Modules/_lsprof.c4
-rw-r--r--Modules/rotatingtree.c9
-rw-r--r--Tools/c-analyzer/cpython/globals-to-fix.tsv1
4 files changed, 12 insertions, 3 deletions
diff --git a/Misc/NEWS.d/next/Library/2024-02-12-11-42-48.gh-issue-103092.sGMKr0.rst b/Misc/NEWS.d/next/Library/2024-02-12-11-42-48.gh-issue-103092.sGMKr0.rst
new file mode 100644
index 0000000..4770139
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-02-12-11-42-48.gh-issue-103092.sGMKr0.rst
@@ -0,0 +1 @@
+Isolate :mod:`_lsprof` (apply :pep:`687`).
diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c
index f1cee7c..a76c3de 100644
--- a/Modules/_lsprof.c
+++ b/Modules/_lsprof.c
@@ -1005,9 +1005,7 @@ _lsprof_exec(PyObject *module)
static PyModuleDef_Slot _lsprofslots[] = {
{Py_mod_exec, _lsprof_exec},
- // XXX gh-103092: fix isolation.
- {Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
- //{Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
+ {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
{0, NULL}
};
diff --git a/Modules/rotatingtree.c b/Modules/rotatingtree.c
index 07e08bc..217e495 100644
--- a/Modules/rotatingtree.c
+++ b/Modules/rotatingtree.c
@@ -1,3 +1,9 @@
+#ifndef Py_BUILD_CORE_BUILTIN
+# define Py_BUILD_CORE_MODULE 1
+#endif
+
+#include "Python.h"
+#include "pycore_lock.h"
#include "rotatingtree.h"
#define KEY_LOWER_THAN(key1, key2) ((char*)(key1) < (char*)(key2))
@@ -10,17 +16,20 @@
static unsigned int random_value = 1;
static unsigned int random_stream = 0;
+static PyMutex random_mutex = {0};
static int
randombits(int bits)
{
int result;
+ PyMutex_Lock(&random_mutex);
if (random_stream < (1U << bits)) {
random_value *= 1082527;
random_stream = random_value;
}
result = random_stream & ((1<<bits)-1);
random_stream >>= bits;
+ PyMutex_Unlock(&random_mutex);
return result;
}
diff --git a/Tools/c-analyzer/cpython/globals-to-fix.tsv b/Tools/c-analyzer/cpython/globals-to-fix.tsv
index 4511966..686a3d3 100644
--- a/Tools/c-analyzer/cpython/globals-to-fix.tsv
+++ b/Tools/c-analyzer/cpython/globals-to-fix.tsv
@@ -482,3 +482,4 @@ Modules/readline.c - sigwinch_ohandler -
Modules/readline.c - completed_input_string -
Modules/rotatingtree.c - random_stream -
Modules/rotatingtree.c - random_value -
+Modules/rotatingtree.c - random_mutex -