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

Skip to content

Commit b41d9aa

Browse files
author
Erlend E. Aasland
committed
Clean up first part of init function
1 parent fc923e7 commit b41d9aa

File tree

1 file changed

+64
-36
lines changed

1 file changed

+64
-36
lines changed

Modules/socketmodule.c

+64-36
Original file line numberDiff line numberDiff line change
@@ -7079,13 +7079,56 @@ static struct PyModuleDef socketmodule = {
70797079
NULL
70807080
};
70817081

7082+
static void
7083+
socket_free_state(PyObject *Py_UNUSED(module))
7084+
{
7085+
socket_state *state = socket_get_state();
7086+
Py_CLEAR(state->sock_type);
7087+
Py_CLEAR(state->socket_herror);
7088+
Py_CLEAR(state->socket_gaierror);
7089+
}
7090+
7091+
static int
7092+
socket_init_state(PyObject *module)
7093+
{
7094+
socket_state *state = socket_get_state();
7095+
state->sock_type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &sock_spec, NULL);
7096+
if (state->sock_type == NULL) {
7097+
goto error;
7098+
}
7099+
7100+
state->socket_herror = PyErr_NewException("socket.herror", PyExc_OSError, NULL);
7101+
if (state->socket_herror == NULL) {
7102+
goto error;
7103+
}
7104+
7105+
state->socket_gaierror = PyErr_NewException("socket.gaierror", PyExc_OSError, NULL);
7106+
if (state->socket_gaierror == NULL) {
7107+
goto error;
7108+
}
7109+
7110+
return 0;
7111+
7112+
error:
7113+
socket_free_state(module);
7114+
return -1;
7115+
}
7116+
7117+
#define ADD_OBJ_REF(module, name, obj) \
7118+
do { \
7119+
if (PyModule_AddObjectRef(module, name, obj) < 0) { \
7120+
goto error; \
7121+
} \
7122+
} while (0)
7123+
70827124
PyMODINIT_FUNC
70837125
PyInit__socket(void)
70847126
{
7085-
PyObject *m, *has_ipv6;
7127+
PyObject *m = NULL, *has_ipv6;
70867128

7087-
if (!os_init())
7088-
return NULL;
7129+
if (!os_init()) {
7130+
goto error;
7131+
}
70897132

70907133
#ifdef MS_WINDOWS
70917134
if (support_wsa_no_inherit == -1) {
@@ -7094,43 +7137,22 @@ PyInit__socket(void)
70947137
#endif
70957138

70967139
m = PyModule_Create(&socketmodule);
7097-
if (m == NULL)
7098-
return NULL;
7099-
7100-
socket_state *state = socket_get_state();
7101-
state->sock_type = (PyTypeObject *)PyType_FromModuleAndSpec(m, &sock_spec, NULL);
7102-
if (!state->sock_type) {
7103-
Py_DECREF(m);
7104-
return NULL;
7140+
if (m == NULL) {
7141+
goto error;
71057142
}
71067143

7107-
Py_INCREF(PyExc_OSError);
7108-
PyModule_AddObject(m, "error", PyExc_OSError);
7109-
state->socket_herror = PyErr_NewException("socket.herror",
7110-
PyExc_OSError, NULL);
7111-
if (state->socket_herror == NULL)
7112-
return NULL;
7113-
Py_INCREF(state->socket_herror);
7114-
PyModule_AddObject(m, "herror", state->socket_herror);
7115-
state->socket_gaierror = PyErr_NewException("socket.gaierror", PyExc_OSError,
7116-
NULL);
7117-
if (state->socket_gaierror == NULL)
7118-
return NULL;
7119-
Py_INCREF(state->socket_gaierror);
7120-
PyModule_AddObject(m, "gaierror", state->socket_gaierror);
7121-
PyModule_AddObjectRef(m, "timeout", PyExc_TimeoutError);
7122-
7123-
Py_INCREF(state->sock_type);
7124-
if (PyModule_AddObject(m, "SocketType", (PyObject *)state->sock_type) < 0) {
7125-
Py_CLEAR(state->sock_type);
7126-
return NULL;
7127-
}
7128-
Py_INCREF((PyObject *)state->sock_type);
7129-
if (PyModule_AddObject(m, "socket", (PyObject *)state->sock_type) < 0) {
7130-
Py_CLEAR(state->sock_type);
7131-
return NULL;
7144+
if (socket_init_state(m)) {
7145+
goto error;
71327146
}
71337147

7148+
socket_state *state = socket_get_state();
7149+
ADD_OBJ_REF(m, "SocketType", (PyObject *)state->sock_type);
7150+
ADD_OBJ_REF(m, "socket", (PyObject *)state->sock_type);
7151+
ADD_OBJ_REF(m, "herror", (PyObject *)state->socket_herror);
7152+
ADD_OBJ_REF(m, "gaierror", (PyObject *)state->socket_gaierror);
7153+
ADD_OBJ_REF(m, "error", PyExc_OSError);
7154+
ADD_OBJ_REF(m, "timeout", PyExc_TimeoutError);
7155+
71347156
#ifdef ENABLE_IPV6
71357157
has_ipv6 = Py_True;
71367158
#else
@@ -8395,4 +8417,10 @@ PyInit__socket(void)
83958417
#endif
83968418

83978419
return m;
8420+
8421+
error:
8422+
socket_free_state(m);
8423+
Py_XDECREF(m);
8424+
return NULL;
83988425
}
8426+
#undef ADD_OBJ_REF

0 commit comments

Comments
 (0)