bpo-1635741: Port _hashlib to multiphase initialization (GH-23358)

Signed-off-by: Christian Heimes <christian@python.org>
This commit is contained in:
Christian Heimes 2020-11-18 16:12:13 +01:00 committed by GitHub
parent c7011012fa
commit 46f59ebd01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 36 deletions

View File

@ -0,0 +1 @@
Port _hashlib extension module to multiphase initialization (:pep:`489`)

View File

@ -2078,7 +2078,6 @@ hashlib_init_hmactype(PyObject *module)
return 0; return 0;
} }
#if 0
static PyModuleDef_Slot hashlib_slots[] = { static PyModuleDef_Slot hashlib_slots[] = {
/* OpenSSL 1.0.2 and LibreSSL */ /* OpenSSL 1.0.2 and LibreSSL */
{Py_mod_exec, hashlib_openssl_legacy_init}, {Py_mod_exec, hashlib_openssl_legacy_init},
@ -2088,7 +2087,6 @@ static PyModuleDef_Slot hashlib_slots[] = {
{Py_mod_exec, hashlib_md_meth_names}, {Py_mod_exec, hashlib_md_meth_names},
{0, NULL} {0, NULL}
}; };
#endif
static struct PyModuleDef _hashlibmodule = { static struct PyModuleDef _hashlibmodule = {
PyModuleDef_HEAD_INIT, PyModuleDef_HEAD_INIT,
@ -2096,7 +2094,7 @@ static struct PyModuleDef _hashlibmodule = {
.m_doc = "OpenSSL interface for hashlib module", .m_doc = "OpenSSL interface for hashlib module",
.m_size = sizeof(_hashlibstate), .m_size = sizeof(_hashlibstate),
.m_methods = EVP_functions, .m_methods = EVP_functions,
.m_slots = NULL, .m_slots = hashlib_slots,
.m_traverse = hashlib_traverse, .m_traverse = hashlib_traverse,
.m_clear = hashlib_clear, .m_clear = hashlib_clear,
.m_free = hashlib_free .m_free = hashlib_free
@ -2105,37 +2103,5 @@ static struct PyModuleDef _hashlibmodule = {
PyMODINIT_FUNC PyMODINIT_FUNC
PyInit__hashlib(void) PyInit__hashlib(void)
{ {
PyObject *m = PyState_FindModule(&_hashlibmodule); return PyModuleDef_Init(&_hashlibmodule);
if (m != NULL) {
Py_INCREF(m);
return m;
}
m = PyModule_Create(&_hashlibmodule);
if (m == NULL) {
return NULL;
}
if (hashlib_openssl_legacy_init(m) < 0) {
Py_DECREF(m);
return NULL;
}
if (hashlib_init_evptype(m) < 0) {
Py_DECREF(m);
return NULL;
}
if (hashlib_init_evpxoftype(m) < 0) {
Py_DECREF(m);
return NULL;
}
if (hashlib_init_hmactype(m) < 0) {
Py_DECREF(m);
return NULL;
}
if (hashlib_md_meth_names(m) == -1) {
Py_DECREF(m);
return NULL;
}
return m;
} }