diff --git a/Lib/struct.py b/Lib/struct.py index 297e7d0d90d..3784c055be9 100644 --- a/Lib/struct.py +++ b/Lib/struct.py @@ -1 +1,2 @@ from _struct import * +from _struct import _clearcache diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 0cc0c5783aa..1da6967ae57 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -729,6 +729,7 @@ def dash_R_cleanup(fs, ps, pic, abcs): linecache.clearcache() mimetypes._default_mime_types() filecmp._cache.clear() + struct._clearcache() doctest.master = None # Collect cyclic trash. diff --git a/Modules/_struct.c b/Modules/_struct.c index e3a873187ee..41cdca70624 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -1851,11 +1851,11 @@ PyTypeObject PyStructType = { /* ---- Standalone functions ---- */ #define MAXCACHE 100 +static PyObject *cache = NULL; static PyObject * cache_struct(PyObject *fmt) { - static PyObject *cache = NULL; PyObject * s_object; if (cache == NULL) { @@ -1881,6 +1881,17 @@ cache_struct(PyObject *fmt) return s_object; } +PyDoc_STRVAR(clearcache_doc, +"Clear the internal cache."); + +static PyObject * +clearcache(PyObject *self) +{ + if (cache != NULL) + PyDict_Clear(cache); + Py_RETURN_NONE; +} + PyDoc_STRVAR(calcsize_doc, "Return size of C struct described by format string fmt."); @@ -2006,6 +2017,7 @@ unpack_from(PyObject *self, PyObject *args, PyObject *kwds) } static struct PyMethodDef module_functions[] = { + {"_clearcache", (PyCFunction)clearcache, METH_NOARGS, clearcache_doc}, {"calcsize", calcsize, METH_O, calcsize_doc}, {"pack", pack, METH_VARARGS, pack_doc}, {"pack_into", pack_into, METH_VARARGS, pack_into_doc},