1717#include <sched.h> // sched_yield()
1818#endif
1919
20+ #include "_interpreters_common.h"
21+
2022
2123/*
2224This module has the following process-global state:
@@ -80,7 +82,9 @@ channel's queue, which are safely managed via the _PyCrossInterpreterData_*()
8082API.. The module does not create any objects that are shared globally.
8183*/
8284
83- #define MODULE_NAME "_xxinterpchannels"
85+ #define MODULE_NAME _xxinterpchannels
86+ #define MODULE_NAME_STR Py_STRINGIFY(MODULE_NAME)
87+ #define MODINIT_FUNC_NAME RESOLVE_MODINIT_FUNC_NAME(MODULE_NAME)
8488
8589
8690#define GLOBAL_MALLOC (TYPE ) \
@@ -101,7 +105,7 @@ static int
101105register_xid_class (PyTypeObject * cls , crossinterpdatafunc shared ,
102106 struct xid_class_registry * classes )
103107{
104- int res = _PyCrossInterpreterData_RegisterClass (cls , shared );
108+ int res = ensure_xid_class (cls , shared );
105109 if (res == 0 ) {
106110 assert (classes -> count < MAX_XID_CLASSES );
107111 // The class has refs elsewhere, so we need to incref here.
@@ -167,7 +171,7 @@ _get_current_interp(void)
167171static PyObject *
168172_get_current_module (void )
169173{
170- PyObject * name = PyUnicode_FromString (MODULE_NAME );
174+ PyObject * name = PyUnicode_FromString (MODULE_NAME_STR );
171175 if (name == NULL ) {
172176 return NULL ;
173177 }
@@ -217,7 +221,7 @@ add_new_exception(PyObject *mod, const char *name, PyObject *base)
217221}
218222
219223#define ADD_NEW_EXCEPTION (MOD , NAME , BASE ) \
220- add_new_exception(MOD, MODULE_NAME "." Py_STRINGIFY(NAME), BASE)
224+ add_new_exception(MOD, MODULE_NAME_STR "." Py_STRINGIFY(NAME), BASE)
221225
222226static PyTypeObject *
223227add_new_type (PyObject * mod , PyType_Spec * spec , crossinterpdatafunc shared ,
@@ -299,7 +303,7 @@ _get_current_module_state(void)
299303 if (mod == NULL ) {
300304 // XXX import it?
301305 PyErr_SetString (PyExc_RuntimeError ,
302- MODULE_NAME " module not imported yet" );
306+ MODULE_NAME_STR " module not imported yet" );
303307 return NULL ;
304308 }
305309 module_state * state = get_module_state (mod );
@@ -784,7 +788,7 @@ _channelqueue_clear_interpreter(_channelqueue *queue, int64_t interpid)
784788 while (next != NULL ) {
785789 _channelitem * item = next ;
786790 next = item -> next ;
787- if (item -> data -> interpid == interpid ) {
791+ if (_PyCrossInterpreterData_INTERPID ( item -> data ) == interpid ) {
788792 if (prev == NULL ) {
789793 queue -> first = item -> next ;
790794 }
@@ -2126,7 +2130,7 @@ static PyStructSequence_Field channel_info_fields[] = {
21262130};
21272131
21282132static PyStructSequence_Desc channel_info_desc = {
2129- .name = MODULE_NAME ".ChannelInfo" ,
2133+ .name = MODULE_NAME_STR ".ChannelInfo" ,
21302134 .doc = channel_info_doc ,
21312135 .fields = channel_info_fields ,
21322136 .n_in_sequence = 8 ,
@@ -2474,10 +2478,11 @@ struct _channelid_xid {
24742478static PyObject *
24752479_channelid_from_xid (_PyCrossInterpreterData * data )
24762480{
2477- struct _channelid_xid * xid = (struct _channelid_xid * )data -> data ;
2481+ struct _channelid_xid * xid = \
2482+ (struct _channelid_xid * )_PyCrossInterpreterData_DATA (data );
24782483
24792484 // It might not be imported yet, so we can't use _get_current_module().
2480- PyObject * mod = PyImport_ImportModule (MODULE_NAME );
2485+ PyObject * mod = PyImport_ImportModule (MODULE_NAME_STR );
24812486 if (mod == NULL ) {
24822487 return NULL ;
24832488 }
@@ -2530,7 +2535,8 @@ _channelid_shared(PyThreadState *tstate, PyObject *obj,
25302535 {
25312536 return -1 ;
25322537 }
2533- struct _channelid_xid * xid = (struct _channelid_xid * )data -> data ;
2538+ struct _channelid_xid * xid = \
2539+ (struct _channelid_xid * )_PyCrossInterpreterData_DATA (data );
25342540 xid -> cid = ((channelid * )obj )-> cid ;
25352541 xid -> end = ((channelid * )obj )-> end ;
25362542 xid -> resolve = ((channelid * )obj )-> resolve ;
@@ -2601,7 +2607,7 @@ static PyType_Slot channelid_typeslots[] = {
26012607};
26022608
26032609static PyType_Spec channelid_typespec = {
2604- .name = MODULE_NAME ".ChannelID" ,
2610+ .name = MODULE_NAME_STR ".ChannelID" ,
26052611 .basicsize = sizeof (channelid ),
26062612 .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
26072613 Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ),
@@ -2680,7 +2686,7 @@ _channelend_shared(PyThreadState *tstate, PyObject *obj,
26802686 if (res < 0 ) {
26812687 return -1 ;
26822688 }
2683- data -> new_object = _channelend_from_xid ;
2689+ _PyCrossInterpreterData_SET_NEW_OBJECT ( data , _channelend_from_xid ) ;
26842690 return 0 ;
26852691}
26862692
@@ -3379,7 +3385,7 @@ module_free(void *mod)
33793385
33803386static struct PyModuleDef moduledef = {
33813387 .m_base = PyModuleDef_HEAD_INIT ,
3382- .m_name = MODULE_NAME ,
3388+ .m_name = MODULE_NAME_STR ,
33833389 .m_doc = module_doc ,
33843390 .m_size = sizeof (module_state ),
33853391 .m_methods = module_functions ,
@@ -3390,7 +3396,7 @@ static struct PyModuleDef moduledef = {
33903396};
33913397
33923398PyMODINIT_FUNC
3393- PyInit__xxinterpchannels (void )
3399+ MODINIT_FUNC_NAME (void )
33943400{
33953401 return PyModuleDef_Init (& moduledef );
33963402}
0 commit comments