gh-94401: Remove unneeded bz2 module state (#94402)

This commit is contained in:
Erlend Egeberg Aasland 2022-06-29 17:51:36 +02:00 committed by GitHub
parent 63c772d5ae
commit ac8a7b9b6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 53 deletions

View File

@ -81,19 +81,6 @@ OutputBuffer_OnError(_BlocksOutputBuffer *buffer)
#define RELEASE_LOCK(obj) PyThread_release_lock((obj)->lock) #define RELEASE_LOCK(obj) PyThread_release_lock((obj)->lock)
typedef struct {
PyTypeObject *bz2_compressor_type;
PyTypeObject *bz2_decompressor_type;
} _bz2_state;
static inline _bz2_state*
get_bz2_state(PyObject *module)
{
void *state = PyModule_GetState(module);
assert(state != NULL);
return (_bz2_state *)state;
}
typedef struct { typedef struct {
PyObject_HEAD PyObject_HEAD
bz_stream bzs; bz_stream bzs;
@ -775,67 +762,40 @@ static PyType_Spec bz2_decompressor_type_spec = {
static int static int
_bz2_exec(PyObject *module) _bz2_exec(PyObject *module)
{ {
_bz2_state *state = get_bz2_state(module); PyTypeObject *bz2_compressor_type = (PyTypeObject *)PyType_FromModuleAndSpec(module,
state->bz2_compressor_type = (PyTypeObject *)PyType_FromModuleAndSpec(module,
&bz2_compressor_type_spec, NULL); &bz2_compressor_type_spec, NULL);
if (state->bz2_compressor_type == NULL) { if (bz2_compressor_type == NULL) {
return -1;
}
int rc = PyModule_AddType(module, bz2_compressor_type);
Py_DECREF(bz2_compressor_type);
if (rc < 0) {
return -1; return -1;
} }
if (PyModule_AddType(module, state->bz2_compressor_type) < 0) { PyTypeObject *bz2_decompressor_type = (PyTypeObject *)PyType_FromModuleAndSpec(module,
return -1;
}
state->bz2_decompressor_type = (PyTypeObject *)PyType_FromModuleAndSpec(module,
&bz2_decompressor_type_spec, NULL); &bz2_decompressor_type_spec, NULL);
if (state->bz2_decompressor_type == NULL) { if (bz2_decompressor_type == NULL) {
return -1; return -1;
} }
rc = PyModule_AddType(module, bz2_decompressor_type);
if (PyModule_AddType(module, state->bz2_decompressor_type) < 0) { Py_DECREF(bz2_decompressor_type);
if (rc < 0) {
return -1; return -1;
} }
return 0; return 0;
} }
static int
_bz2_traverse(PyObject *module, visitproc visit, void *arg)
{
_bz2_state *state = get_bz2_state(module);
Py_VISIT(state->bz2_compressor_type);
Py_VISIT(state->bz2_decompressor_type);
return 0;
}
static int
_bz2_clear(PyObject *module)
{
_bz2_state *state = get_bz2_state(module);
Py_CLEAR(state->bz2_compressor_type);
Py_CLEAR(state->bz2_decompressor_type);
return 0;
}
static void
_bz2_free(void *module)
{
_bz2_clear((PyObject *)module);
}
static struct PyModuleDef_Slot _bz2_slots[] = { static struct PyModuleDef_Slot _bz2_slots[] = {
{Py_mod_exec, _bz2_exec}, {Py_mod_exec, _bz2_exec},
{0, NULL} {0, NULL}
}; };
static struct PyModuleDef _bz2module = { static struct PyModuleDef _bz2module = {
PyModuleDef_HEAD_INIT, .m_base = PyModuleDef_HEAD_INIT,
.m_name = "_bz2", .m_name = "_bz2",
.m_size = sizeof(_bz2_state),
.m_slots = _bz2_slots, .m_slots = _bz2_slots,
.m_traverse = _bz2_traverse,
.m_clear = _bz2_clear,
.m_free = _bz2_free,
}; };
PyMODINIT_FUNC PyMODINIT_FUNC