gh-112070: make functools.lru_cache
threadsafe in --disable-gil build (gh-112111)
* gh-112070: make `functools.lrucacle` threadsafe in --disable-gil build * gh-112070: update generate `functoolsmodule` files * gh-112070: add NEWS file * Delete Misc/NEWS.d/next/Library/2023-11-15-20-19-45.gh-issue-112070.q6OhcU.rst * gh-112070: reformat functoolsmodule.c --------- Co-authored-by: Sam Gross <colesbury@gmail.com>
This commit is contained in:
parent
8cd70eefc7
commit
0ee2d77331
@ -1,5 +1,6 @@
|
|||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
#include "pycore_call.h" // _PyObject_CallNoArgs()
|
#include "pycore_call.h" // _PyObject_CallNoArgs()
|
||||||
|
#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION
|
||||||
#include "pycore_dict.h" // _PyDict_Pop_KnownHash()
|
#include "pycore_dict.h" // _PyDict_Pop_KnownHash()
|
||||||
#include "pycore_long.h" // _PyLong_GetZero()
|
#include "pycore_long.h" // _PyLong_GetZero()
|
||||||
#include "pycore_moduleobject.h" // _PyModule_GetState()
|
#include "pycore_moduleobject.h" // _PyModule_GetState()
|
||||||
@ -1274,7 +1275,11 @@ lru_cache_dealloc(lru_cache_object *obj)
|
|||||||
static PyObject *
|
static PyObject *
|
||||||
lru_cache_call(lru_cache_object *self, PyObject *args, PyObject *kwds)
|
lru_cache_call(lru_cache_object *self, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
return self->wrapper(self, args, kwds);
|
PyObject *result;
|
||||||
|
Py_BEGIN_CRITICAL_SECTION(self);
|
||||||
|
result = self->wrapper(self, args, kwds);
|
||||||
|
Py_END_CRITICAL_SECTION();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
@ -1287,6 +1292,7 @@ lru_cache_descr_get(PyObject *self, PyObject *obj, PyObject *type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
|
@critical_section
|
||||||
_functools._lru_cache_wrapper.cache_info
|
_functools._lru_cache_wrapper.cache_info
|
||||||
|
|
||||||
Report cache statistics
|
Report cache statistics
|
||||||
@ -1294,7 +1300,7 @@ Report cache statistics
|
|||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
_functools__lru_cache_wrapper_cache_info_impl(PyObject *self)
|
_functools__lru_cache_wrapper_cache_info_impl(PyObject *self)
|
||||||
/*[clinic end generated code: output=cc796a0b06dbd717 input=f05e5b6ebfe38645]*/
|
/*[clinic end generated code: output=cc796a0b06dbd717 input=00e1acb31aa21ecc]*/
|
||||||
{
|
{
|
||||||
lru_cache_object *_self = (lru_cache_object *) self;
|
lru_cache_object *_self = (lru_cache_object *) self;
|
||||||
if (_self->maxsize == -1) {
|
if (_self->maxsize == -1) {
|
||||||
@ -1308,6 +1314,7 @@ _functools__lru_cache_wrapper_cache_info_impl(PyObject *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
|
@critical_section
|
||||||
_functools._lru_cache_wrapper.cache_clear
|
_functools._lru_cache_wrapper.cache_clear
|
||||||
|
|
||||||
Clear the cache and cache statistics
|
Clear the cache and cache statistics
|
||||||
@ -1315,7 +1322,7 @@ Clear the cache and cache statistics
|
|||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
_functools__lru_cache_wrapper_cache_clear_impl(PyObject *self)
|
_functools__lru_cache_wrapper_cache_clear_impl(PyObject *self)
|
||||||
/*[clinic end generated code: output=58423b35efc3e381 input=6ca59dba09b12584]*/
|
/*[clinic end generated code: output=58423b35efc3e381 input=dfa33acbecf8b4b2]*/
|
||||||
{
|
{
|
||||||
lru_cache_object *_self = (lru_cache_object *) self;
|
lru_cache_object *_self = (lru_cache_object *) self;
|
||||||
lru_list_elem *list = lru_cache_unlink_list(_self);
|
lru_list_elem *list = lru_cache_unlink_list(_self);
|
||||||
|
18
Modules/clinic/_functoolsmodule.c.h
generated
18
Modules/clinic/_functoolsmodule.c.h
generated
@ -81,7 +81,13 @@ _functools__lru_cache_wrapper_cache_info_impl(PyObject *self);
|
|||||||
static PyObject *
|
static PyObject *
|
||||||
_functools__lru_cache_wrapper_cache_info(PyObject *self, PyObject *Py_UNUSED(ignored))
|
_functools__lru_cache_wrapper_cache_info(PyObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
{
|
{
|
||||||
return _functools__lru_cache_wrapper_cache_info_impl(self);
|
PyObject *return_value = NULL;
|
||||||
|
|
||||||
|
Py_BEGIN_CRITICAL_SECTION(self);
|
||||||
|
return_value = _functools__lru_cache_wrapper_cache_info_impl(self);
|
||||||
|
Py_END_CRITICAL_SECTION();
|
||||||
|
|
||||||
|
return return_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(_functools__lru_cache_wrapper_cache_clear__doc__,
|
PyDoc_STRVAR(_functools__lru_cache_wrapper_cache_clear__doc__,
|
||||||
@ -99,6 +105,12 @@ _functools__lru_cache_wrapper_cache_clear_impl(PyObject *self);
|
|||||||
static PyObject *
|
static PyObject *
|
||||||
_functools__lru_cache_wrapper_cache_clear(PyObject *self, PyObject *Py_UNUSED(ignored))
|
_functools__lru_cache_wrapper_cache_clear(PyObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
{
|
{
|
||||||
return _functools__lru_cache_wrapper_cache_clear_impl(self);
|
PyObject *return_value = NULL;
|
||||||
|
|
||||||
|
Py_BEGIN_CRITICAL_SECTION(self);
|
||||||
|
return_value = _functools__lru_cache_wrapper_cache_clear_impl(self);
|
||||||
|
Py_END_CRITICAL_SECTION();
|
||||||
|
|
||||||
|
return return_value;
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=231403340a20e31b input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=5e3207fa0d28cdb1 input=a9049054013a1b77]*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user