uwsgi/uwsgi_python312.patch
2023-09-30 19:02:38 +02:00

152 lines
4.8 KiB
Diff

diff -uNr a/plugins/python/python_plugin.c b/plugins/python/python_plugin.c
--- a/plugins/python/python_plugin.c 2023-07-27 17:34:12.000000000 +0200
+++ b/plugins/python/python_plugin.c 2023-09-30 18:30:47.884490233 +0200
@@ -197,6 +197,7 @@
PyMethodDef uwsgi_spit_method[] = { {"uwsgi_spit", py_uwsgi_spit, METH_VARARGS, ""} };
PyMethodDef uwsgi_write_method[] = { {"uwsgi_write", py_uwsgi_write, METH_VARARGS, ""} };
+PyObject *init_uwsgi3(void);
int uwsgi_python_init() {
char *pyversion = strchr(Py_GetVersion(), '\n');
@@ -261,6 +262,9 @@
wchar_t *pname = uwsgi_calloc(sizeof(wchar_t) * (strlen(program_name)+1));
mbstowcs(pname, program_name, strlen(program_name)+1);
Py_SetProgramName(pname);
+#ifdef UWSGI_PY312
+ PyImport_AppendInittab("uwsgi", init_uwsgi3);
+#endif
#else
Py_SetProgramName(program_name);
#endif
@@ -658,7 +662,9 @@
#ifdef PYTHREE
+#ifndef UWSGI_PY312
PyImport_AppendInittab("uwsgi", init_uwsgi3);
+#endif
new_uwsgi_module = PyImport_AddModule("uwsgi");
#else
new_uwsgi_module = Py_InitModule3("uwsgi", NULL, uwsgi_py_doc);
@@ -1161,7 +1167,10 @@
// prepare for stack suspend/resume
if (uwsgi.async > 1) {
-#ifdef UWSGI_PY311
+#ifdef UWSGI_PY312
+ up.current_c_recursion_remaining = uwsgi_malloc(sizeof(int)*uwsgi.async);
+ up.current_py_recursion_remaining = uwsgi_malloc(sizeof(int)*uwsgi.async);
+#elif defined UWSGI_PY311
up.current_recursion_remaining = uwsgi_malloc(sizeof(int)*uwsgi.async);
#else
up.current_recursion_depth = uwsgi_malloc(sizeof(int)*uwsgi.async);
@@ -1324,7 +1333,12 @@
// Acquire the gil and import lock before forking in order to avoid
// deadlocks in workers
UWSGI_GET_GIL
+#if defined UWSGI_PY312
+ PyInterpreterState *interp = PyInterpreterState_Get();
+ _PyImport_AcquireLock(interp);
+#else
_PyImport_AcquireLock();
+#endif
}
}
@@ -1336,7 +1350,12 @@
if (uwsgi.has_threads) {
if (step == 0) {
// Release locks within master process
+#if defined UWSGI_PY312
+ PyInterpreterState *interp = PyInterpreterState_Get();
+ _PyImport_ReleaseLock(interp);
+#else
_PyImport_ReleaseLock();
+#endif
UWSGI_RELEASE_GIL
}
else {
@@ -1592,7 +1611,11 @@
PyGILState_Release(pgst);
if (wsgi_req) {
-#ifdef UWSGI_PY311
+#ifdef UWSGI_PY312
+ up.current_c_recursion_remaining[wsgi_req->async_id] = tstate->c_recursion_remaining;
+ up.current_py_recursion_remaining[wsgi_req->async_id] = tstate->py_recursion_remaining;
+ up.current_frame[wsgi_req->async_id] = tstate->cframe;
+#elif defined UWSGI_PY311
up.current_recursion_remaining[wsgi_req->async_id] = tstate->recursion_remaining;
up.current_frame[wsgi_req->async_id] = tstate->cframe;
#else
@@ -1601,7 +1624,11 @@
#endif
}
else {
-#ifdef UWSGI_PY311
+#ifdef UWSGI_PY312
+ up.current_main_c_recursion_remaining = tstate->c_recursion_remaining;
+ up.current_main_py_recursion_remaining = tstate->py_recursion_remaining;
+ up.current_main_frame = tstate->cframe;
+#elif defined UWSGI_PY311
up.current_main_recursion_remaining = tstate->recursion_remaining;
up.current_main_frame = tstate->cframe;
#else
@@ -1835,7 +1862,11 @@
PyGILState_Release(pgst);
if (wsgi_req) {
-#ifdef UWSGI_PY311
+#ifdef UWSGI_PY312
+ tstate->c_recursion_remaining = up.current_c_recursion_remaining[wsgi_req->async_id];
+ tstate->py_recursion_remaining = up.current_py_recursion_remaining[wsgi_req->async_id];
+ tstate->cframe = up.current_frame[wsgi_req->async_id];
+#elif defined UWSGI_PY311
tstate->recursion_remaining = up.current_recursion_remaining[wsgi_req->async_id];
tstate->cframe = up.current_frame[wsgi_req->async_id];
#else
@@ -1844,7 +1875,11 @@
#endif
}
else {
-#ifdef UWSGI_PY311
+#ifdef UWSGI_PY312
+ tstate->c_recursion_remaining = up.current_main_c_recursion_remaining;
+ tstate->py_recursion_remaining = up.current_main_py_recursion_remaining;
+ tstate->cframe = up.current_main_frame;
+#elif defined UWSGI_PY311
tstate->recursion_remaining = up.current_main_recursion_remaining;
tstate->cframe = up.current_main_frame;
#else
diff -uNr a/plugins/python/uwsgi_python.h b/plugins/python/uwsgi_python.h
--- a/plugins/python/uwsgi_python.h 2023-07-27 17:34:12.000000000 +0200
+++ b/plugins/python/uwsgi_python.h 2023-09-30 18:30:24.766699317 +0200
@@ -21,6 +21,10 @@
# define UWSGI_PY311
#endif
+#if (PY_VERSION_HEX >= 0x030c0000)
+# define UWSGI_PY312
+#endif
+
#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 7
#define HAS_NOT_PyMemoryView_FromBuffer
#endif
@@ -168,7 +172,15 @@
char *callable;
-#ifdef UWSGI_PY311
+#ifdef UWSGI_PY312
+ int *current_c_recursion_remaining;
+ int *current_py_recursion_remaining;
+ _PyCFrame **current_frame;
+
+ int current_main_c_recursion_remaining;
+ int current_main_py_recursion_remaining;
+ _PyCFrame *current_main_frame;
+#elif defined UWSGI_PY311
int *current_recursion_remaining;
_PyCFrame **current_frame;