Skip to content

Commit 620a81a

Browse files
committed
Use multi-phase module init
1 parent 55fab64 commit 620a81a

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

src/sonyflake_turbo/_sonyflake.c

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -449,11 +449,25 @@ static PyType_Spec sonyflake_type_spec = {
449449
.slots = sonyflake_type_slots,
450450
};
451451

452+
static int sonyflake_exec(PyObject *module);
453+
454+
static PyModuleDef_Slot sonyflake_slots[] = {
455+
{Py_mod_exec, sonyflake_exec},
456+
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030c0000
457+
{Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
458+
#endif
459+
#if !defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED)
460+
{Py_mod_gil, Py_MOD_GIL_NOT_USED},
461+
#endif
462+
{0, NULL}
463+
};
464+
452465
static struct PyModuleDef sonyflake_module = {
453466
PyModuleDef_HEAD_INIT,
454467
.m_name = "sonyflake_turbo",
455468
.m_doc = "",
456-
.m_size = -1,
469+
.m_size = 0,
470+
.m_slots = sonyflake_slots,
457471
};
458472

459473
inline uint16_t machine_id_lcg(uint32_t x) {
@@ -552,16 +566,11 @@ static PyType_Spec machine_id_lcg_spec = {
552566
PyMODINIT_FUNC
553567
PyInit__sonyflake(void)
554568
{
555-
PyObject *sonyflake_cls, *machine_id_lcg_cls;
556-
PyObject *module = PyModule_Create(&sonyflake_module);
557-
558-
if (!module) {
559-
return NULL;
560-
}
569+
return PyModuleDef_Init(&sonyflake_module);
570+
}
561571

562-
#if defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API)
563-
PyUnstable_Module_SetGIL(module, Py_MOD_GIL_NOT_USED);
564-
#endif
572+
static int sonyflake_exec(PyObject *module) {
573+
PyObject *sonyflake_cls, *machine_id_lcg_cls;
565574

566575
sonyflake_cls = PyType_FromSpec(&sonyflake_type_spec);
567576

@@ -591,13 +600,12 @@ PyInit__sonyflake(void)
591600
PyModule_AddIntMacro(module, SONYFLAKE_MACHINE_ID_OFFSET);
592601
PyModule_AddIntMacro(module, SONYFLAKE_TIME_OFFSET);
593602

594-
return module;
603+
return 0;
595604

596605
err_lcg:
597606
Py_DECREF(machine_id_lcg_cls);
598607
err_sf:
599608
Py_DECREF(sonyflake_cls);
600609
err:
601-
Py_DECREF(module);
602-
return NULL;
610+
return -1;
603611
}

0 commit comments

Comments
 (0)