Thanks to visit codestin.com
Credit goes to github.com

Skip to content

bpo-36876: Avoid static locals. #13372

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Move away from static locals.
38 changes: 15 additions & 23 deletions Modules/_asynciomodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,21 @@ _Py_IDENTIFIER(current_task);
_Py_IDENTIFIER(get_event_loop);
_Py_IDENTIFIER(send);
_Py_IDENTIFIER(throw);
_Py_IDENTIFIER(get_loop);
_Py_IDENTIFIER(_loop);
_Py_IDENTIFIER(get_debug);
_Py_IDENTIFIER(PENDING);
_Py_IDENTIFIER(CANCELLED);
_Py_IDENTIFIER(FINISHED);
_Py_IDENTIFIER(_repr_info);
_Py_IDENTIFIER(call_exception_handler);
_Py_IDENTIFIER(message);
_Py_IDENTIFIER(exception);
_Py_IDENTIFIER(future);
_Py_IDENTIFIER(source_traceback);
_Py_IDENTIFIER(add);
_Py_IDENTIFIER(discard);
_Py_IDENTIFIER(task);


/* State of the _asyncio module */
Expand Down Expand Up @@ -202,8 +217,6 @@ get_future_loop(PyObject *fut)
{
/* Implementation of `asyncio.futures._get_loop` */

_Py_IDENTIFIER(get_loop);
_Py_IDENTIFIER(_loop);
PyObject *getloop;

if (Future_CheckExact(fut) || Task_CheckExact(fut)) {
Expand Down Expand Up @@ -469,7 +482,6 @@ future_init(FutureObj *fut, PyObject *loop)
{
PyObject *res;
int is_true;
_Py_IDENTIFIER(get_debug);

// Same to FutureObj_clear() but not clearing fut->dict
Py_CLEAR(fut->fut_loop);
Expand Down Expand Up @@ -1255,9 +1267,6 @@ FutureObj_get_source_traceback(FutureObj *fut, void *Py_UNUSED(ignored))
static PyObject *
FutureObj_get_state(FutureObj *fut, void *Py_UNUSED(ignored))
{
_Py_IDENTIFIER(PENDING);
_Py_IDENTIFIER(CANCELLED);
_Py_IDENTIFIER(FINISHED);
PyObject *ret = NULL;

ENSURE_FUTURE_ALIVE(fut)
Expand Down Expand Up @@ -1294,8 +1303,6 @@ _asyncio_Future__repr_info_impl(FutureObj *self)
static PyObject *
FutureObj_repr(FutureObj *fut)
{
_Py_IDENTIFIER(_repr_info);

ENSURE_FUTURE_ALIVE(fut)

PyObject *rinfo = _PyObject_CallMethodIdObjArgs((PyObject*)fut,
Expand All @@ -1320,12 +1327,6 @@ FutureObj_repr(FutureObj *fut)
static void
FutureObj_finalize(FutureObj *fut)
{
_Py_IDENTIFIER(call_exception_handler);
_Py_IDENTIFIER(message);
_Py_IDENTIFIER(exception);
_Py_IDENTIFIER(future);
_Py_IDENTIFIER(source_traceback);

PyObject *error_type, *error_value, *error_traceback;
PyObject *context;
PyObject *message = NULL;
Expand Down Expand Up @@ -1845,8 +1846,6 @@ TaskWakeupMethWrapper_new(TaskObj *task)
static int
register_task(PyObject *task)
{
_Py_IDENTIFIER(add);

PyObject *res = _PyObject_CallMethodIdObjArgs(
all_tasks, &PyId_add, task, NULL);
if (res == NULL) {
Expand All @@ -1860,8 +1859,6 @@ register_task(PyObject *task)
static int
unregister_task(PyObject *task)
{
_Py_IDENTIFIER(discard);

PyObject *res = _PyObject_CallMethodIdObjArgs(
all_tasks, &PyId_discard, task, NULL);
if (res == NULL) {
Expand Down Expand Up @@ -2358,11 +2355,6 @@ _asyncio_Task_set_name(TaskObj *self, PyObject *value)
static void
TaskObj_finalize(TaskObj *task)
{
_Py_IDENTIFIER(call_exception_handler);
_Py_IDENTIFIER(task);
_Py_IDENTIFIER(message);
_Py_IDENTIFIER(source_traceback);

PyObject *context;
PyObject *message = NULL;
PyObject *func;
Expand Down
16 changes: 8 additions & 8 deletions Modules/_bisectmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,15 @@ bisect_right(PyObject *self, PyObject *args, PyObject *kw)
Py_ssize_t lo = 0;
Py_ssize_t hi = -1;
Py_ssize_t index;
static char *keywords[] = {"a", "x", "lo", "hi", NULL};
static char *kwlist[] = {"a", "x", "lo", "hi", NULL};

if (kw == NULL && PyTuple_GET_SIZE(args) == 2) {
list = PyTuple_GET_ITEM(args, 0);
item = PyTuple_GET_ITEM(args, 1);
}
else {
if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|nn:bisect_right",
keywords, &list, &item, &lo, &hi))
kwlist, &list, &item, &lo, &hi))
return NULL;
}
index = internal_bisect_right(list, item, lo, hi);
Expand Down Expand Up @@ -87,15 +87,15 @@ insort_right(PyObject *self, PyObject *args, PyObject *kw)
Py_ssize_t lo = 0;
Py_ssize_t hi = -1;
Py_ssize_t index;
static char *keywords[] = {"a", "x", "lo", "hi", NULL};
static char *kwlist[] = {"a", "x", "lo", "hi", NULL};

if (kw == NULL && PyTuple_GET_SIZE(args) == 2) {
list = PyTuple_GET_ITEM(args, 0);
item = PyTuple_GET_ITEM(args, 1);
}
else {
if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|nn:insort_right",
keywords, &list, &item, &lo, &hi))
kwlist, &list, &item, &lo, &hi))
return NULL;
}
index = internal_bisect_right(list, item, lo, hi);
Expand Down Expand Up @@ -168,15 +168,15 @@ bisect_left(PyObject *self, PyObject *args, PyObject *kw)
Py_ssize_t lo = 0;
Py_ssize_t hi = -1;
Py_ssize_t index;
static char *keywords[] = {"a", "x", "lo", "hi", NULL};
static char *kwlist[] = {"a", "x", "lo", "hi", NULL};

if (kw == NULL && PyTuple_GET_SIZE(args) == 2) {
list = PyTuple_GET_ITEM(args, 0);
item = PyTuple_GET_ITEM(args, 1);
}
else {
if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|nn:bisect_left",
keywords, &list, &item, &lo, &hi))
kwlist, &list, &item, &lo, &hi))
return NULL;
}
index = internal_bisect_left(list, item, lo, hi);
Expand Down Expand Up @@ -204,14 +204,14 @@ insort_left(PyObject *self, PyObject *args, PyObject *kw)
Py_ssize_t lo = 0;
Py_ssize_t hi = -1;
Py_ssize_t index;
static char *keywords[] = {"a", "x", "lo", "hi", NULL};
static char *kwlist[] = {"a", "x", "lo", "hi", NULL};

if (kw == NULL && PyTuple_GET_SIZE(args) == 2) {
list = PyTuple_GET_ITEM(args, 0);
item = PyTuple_GET_ITEM(args, 1);
} else {
if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|nn:insort_left",
keywords, &list, &item, &lo, &hi))
kwlist, &list, &item, &lo, &hi))
return NULL;
}
index = internal_bisect_left(list, item, lo, hi);
Expand Down
2 changes: 1 addition & 1 deletion Modules/_blake2/impl/blake2-impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ BLAKE2_LOCAL_INLINE(uint64_t) rotr64( const uint64_t w, const unsigned c )
/* prevents compiler optimizing out memset() */
BLAKE2_LOCAL_INLINE(void) secure_zero_memory(void *v, size_t n)
{
static void *(*const volatile memset_v)(void *, int, size_t) = &memset;
static void *(*const volatile memset_v)(void *, int, size_t) = &memset; // Static is okay here (process-global).
memset_v(v, 0, n);
}

Expand Down
10 changes: 6 additions & 4 deletions Modules/_collectionsmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
#include <sys/types.h> /* For size_t */
#endif


_Py_IDENTIFIER(__dict__);
_Py_IDENTIFIER(items);
_Py_IDENTIFIER(get);
_Py_IDENTIFIER(__setitem__);

/*[clinic input]
class _tuplegetter "_tuplegetterobject *" "&tuplegetter_type"
[clinic start generated code]*/
Expand Down Expand Up @@ -1321,7 +1327,6 @@ static PyObject *
deque_reduce(dequeobject *deque, PyObject *Py_UNUSED(ignored))
{
PyObject *dict, *it;
_Py_IDENTIFIER(__dict__);

if (_PyObject_LookupAttrId((PyObject *)deque, &PyId___dict__, &dict) < 0) {
return NULL;
Expand Down Expand Up @@ -2031,7 +2036,6 @@ defdict_reduce(defdictobject *dd, PyObject *Py_UNUSED(ignored))
PyObject *items;
PyObject *iter;
PyObject *result;
_Py_IDENTIFIER(items);

if (dd->default_factory == NULL || dd->default_factory == Py_None)
args = PyTuple_New(0);
Expand Down Expand Up @@ -2236,8 +2240,6 @@ Count elements in the iterable, updating the mapping");
static PyObject *
_count_elements(PyObject *self, PyObject *args)
{
_Py_IDENTIFIER(get);
_Py_IDENTIFIER(__setitem__);
PyObject *it, *iterable, *mapping, *oldval;
PyObject *newval = NULL;
PyObject *key = NULL;
Expand Down
3 changes: 2 additions & 1 deletion Modules/_csv.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ module instead.
#include <stdbool.h>


_Py_IDENTIFIER(write);

typedef struct {
PyObject *error_obj; /* CSV exception */
PyObject *dialects; /* Dialect registry */
Expand Down Expand Up @@ -1365,7 +1367,6 @@ csv_writer(PyObject *module, PyObject *args, PyObject *keyword_args)
{
PyObject * output_file, * dialect = NULL;
WriterObj * self = PyObject_GC_New(WriterObj, &Writer_Type);
_Py_IDENTIFIER(write);

if (!self)
return NULL;
Expand Down
Loading