da-woods · GitHub

Bug report

Bug description:

#include <Python.h>
static int
examplemodule_exec(PyObject *module) {
    // Yes I know there's no error checking...
    PyObject *gil_enabled = PySys_GetObject("_is_gil_enabled");
    PyObject *result = PyObject_CallNoArgs(gil_enabled);
    printf("gil enabled: ");
    PyObject_Print(result, stdout, 0);
    printf("\n");
    Py_DECREF(result);
    return 0;
}
static PyModuleDef_Slot examplemodule_slots[] = {
    {Py_mod_name, "examplemodule"},
    {Py_mod_gil, Py_MOD_GIL_USED},
    {Py_mod_exec, (void*)examplemodule_exec},
    {0}
};
PyMODEXPORT_FUNC
PyModExport_examplemodule(void)
{
    return examplemodule_slots;
}

I believe that the code above should print "gil enabled: True". However when I run it on Python 3.15.0a2 freethreading it prints "gil enabled: False".

I don't believe this is an issue in the old style PyInit_ initialization.

CPython versions tested on:

3.15

Operating systems tested on:

Linux

Linked PRs

Read the original on github.com ↗