mirror of
https://github.com/python/cpython.git
synced 2025-11-11 14:44:57 +00:00
gh-103092: Add a mutex to make the PRNG state of rotatingtree concurrent-safe (#115301)
This commit is contained in:
parent
6a95676bb5
commit
ca56c3a172
4 changed files with 12 additions and 3 deletions
|
|
@ -0,0 +1 @@
|
||||||
|
Isolate :mod:`_lsprof` (apply :pep:`687`).
|
||||||
|
|
@ -1005,9 +1005,7 @@ _lsprof_exec(PyObject *module)
|
||||||
|
|
||||||
static PyModuleDef_Slot _lsprofslots[] = {
|
static PyModuleDef_Slot _lsprofslots[] = {
|
||||||
{Py_mod_exec, _lsprof_exec},
|
{Py_mod_exec, _lsprof_exec},
|
||||||
// XXX gh-103092: fix isolation.
|
{Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
|
||||||
{Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
|
|
||||||
//{Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
|
|
||||||
{0, NULL}
|
{0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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"
|
#include "rotatingtree.h"
|
||||||
|
|
||||||
#define KEY_LOWER_THAN(key1, key2) ((char*)(key1) < (char*)(key2))
|
#define KEY_LOWER_THAN(key1, key2) ((char*)(key1) < (char*)(key2))
|
||||||
|
|
@ -10,17 +16,20 @@
|
||||||
|
|
||||||
static unsigned int random_value = 1;
|
static unsigned int random_value = 1;
|
||||||
static unsigned int random_stream = 0;
|
static unsigned int random_stream = 0;
|
||||||
|
static PyMutex random_mutex = {0};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
randombits(int bits)
|
randombits(int bits)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
PyMutex_Lock(&random_mutex);
|
||||||
if (random_stream < (1U << bits)) {
|
if (random_stream < (1U << bits)) {
|
||||||
random_value *= 1082527;
|
random_value *= 1082527;
|
||||||
random_stream = random_value;
|
random_stream = random_value;
|
||||||
}
|
}
|
||||||
result = random_stream & ((1<<bits)-1);
|
result = random_stream & ((1<<bits)-1);
|
||||||
random_stream >>= bits;
|
random_stream >>= bits;
|
||||||
|
PyMutex_Unlock(&random_mutex);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -482,3 +482,4 @@ Modules/readline.c - sigwinch_ohandler -
|
||||||
Modules/readline.c - completed_input_string -
|
Modules/readline.c - completed_input_string -
|
||||||
Modules/rotatingtree.c - random_stream -
|
Modules/rotatingtree.c - random_stream -
|
||||||
Modules/rotatingtree.c - random_value -
|
Modules/rotatingtree.c - random_value -
|
||||||
|
Modules/rotatingtree.c - random_mutex -
|
||||||
|
|
|
||||||
|
Can't render this file because it has a wrong number of fields in line 4.
|
Loading…
Add table
Add a link
Reference in a new issue