Browse Source
bpo-42333: Port _ssl extension to multiphase initialization (PEP 489) (GH-23253)
bpo-42333: Port _ssl extension to multiphase initialization (PEP 489) (GH-23253)
- Introduce sslmodule_slots - Introduce sslmodulestate - Use sslmodulestate - Get rid of PyState_FindModule - Move new structs and helpers to header file - Use macros to access state - Keep a strong ref to socket typepull/25461/head
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 468 additions and 366 deletions
-
1Misc/NEWS.d/next/Library/2021-04-17-19-31-17.bpo-42333.cgbtZO.rst
-
752Modules/_ssl.c
-
45Modules/_ssl.h
-
6Modules/_ssl/debughelpers.c
-
20Modules/clinic/_ssl.c.h
-
10setup.py
@ -0,0 +1 @@ |
|||
Port ``_ssl`` extension module to multiphase initialization. |
|||
752
Modules/_ssl.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,45 @@ |
|||
#ifndef Py_SSL_H |
|||
#define Py_SSL_H |
|||
|
|||
/* |
|||
* ssl module state |
|||
*/ |
|||
typedef struct { |
|||
/* Types */ |
|||
PyTypeObject *PySSLContext_Type; |
|||
PyTypeObject *PySSLSocket_Type; |
|||
PyTypeObject *PySSLMemoryBIO_Type; |
|||
PyTypeObject *PySSLSession_Type; |
|||
/* SSL error object */ |
|||
PyObject *PySSLErrorObject; |
|||
PyObject *PySSLCertVerificationErrorObject; |
|||
PyObject *PySSLZeroReturnErrorObject; |
|||
PyObject *PySSLWantReadErrorObject; |
|||
PyObject *PySSLWantWriteErrorObject; |
|||
PyObject *PySSLSyscallErrorObject; |
|||
PyObject *PySSLEOFErrorObject; |
|||
/* Error mappings */ |
|||
PyObject *err_codes_to_names; |
|||
PyObject *err_names_to_codes; |
|||
PyObject *lib_codes_to_names; |
|||
/* socket type from module CAPI */ |
|||
PyTypeObject *Sock_Type; |
|||
} _sslmodulestate; |
|||
|
|||
static struct PyModuleDef _sslmodule_def; |
|||
|
|||
Py_LOCAL_INLINE(_sslmodulestate*) |
|||
get_ssl_state(PyObject *module) |
|||
{ |
|||
void *state = PyModule_GetState(module); |
|||
assert(state != NULL); |
|||
return (_sslmodulestate *)state; |
|||
} |
|||
|
|||
#define get_state_type(type) \ |
|||
(get_ssl_state(_PyType_GetModuleByDef(type, &_sslmodule_def))) |
|||
#define get_state_ctx(c) (((PySSLContext *)(c))->state) |
|||
#define get_state_sock(s) (((PySSLSocket *)(s))->ctx->state) |
|||
#define get_state_mbio(b) ((_sslmodulestate *)PyType_GetModuleState(Py_TYPE(b))) |
|||
|
|||
#endif /* Py_SSL_H */ |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue