summarylogtreecommitdiffstats
path: root/swigpython-py313.patch
blob: 4d4eea7bee0f2bbd463fbf44044c4553f4d319c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
--- src_orig/canorus-0.7.3rc3/src/scripting/swigpython.cpp	2025-06-10 11:37:24.553603614 -0400
+++ src/canorus-0.7.3rc3/src/scripting/swigpython.cpp	2025-06-10 12:01:53.820340051 -0400
@@ -78,16 +78,16 @@
 #endif
 
     mainThreadState = PyThreadState_Get();
-    PyEval_ReleaseLock();
+    PyEval_ReleaseThread(mainThreadState);
 
        // my section with thread initialization
-PyEval_AcquireLock();
+PyEval_AcquireThread(PyThreadState_Get());
     PyInterpreterState * mainInterpreterState = mainThreadState->interp;
 
     pycliThreadState = PyThreadState_New(mainInterpreterState);
     PyThreadState_Swap(mainThreadState);
 
-PyEval_ReleaseLock();
+PyEval_ReleaseThread(PyThreadState_Get());
 }
 
 /*!
@@ -136,7 +136,7 @@
 	QString moduleName = fileName.left(fileName.lastIndexOf(".py"));
 	moduleName = moduleName.remove(0, moduleName.lastIndexOf("/")+1);
 
-	PyEval_AcquireLock();
+  PyEval_AcquireThread(PyThreadState_Get());
 	
 	PyObject *pyModule;
 	if (autoReload) {
@@ -152,19 +152,20 @@
 	} else {
 		pyModule = PyImport_ImportModule((char*)moduleName.toStdString().c_str());
 	}
-	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
+	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(PyThreadState_Get()); return NULL; }
 
 	// Get function object
 	PyObject *pyFunction = PyObject_GetAttrString(pyModule, (char*)function.toStdString().c_str());
-	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
+	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(PyThreadState_Get()); return NULL; }
 
 	// Call the actual function
 	PyObject *ret;
 	if (args.size())
-		ret = PyEval_CallObject(pyFunction, pyArgs);
-	else
-		ret = PyEval_CallObject(pyFunction, NULL);
-	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
+    ret = PyObject_Call(pyFunction, pyArgs, NULL);
+  else
+    ret = PyObject_CallNoArgs(pyFunction);
+
+	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(PyThreadState_Get()); return NULL; }
 
 //	Py_DECREF(pyFunction); // -Matevz
 //	Py_DECREF(pyModule); // -Matevz
@@ -172,7 +173,8 @@
 //	for (int i=0; i<args.size(); i++)
 //		Py_DECREF(args[i]); // -Matevz
 
-    PyEval_ReleaseLock();
+    PyEval_ReleaseThread(PyThreadState_Get());
+
 	return ret;
 }
 
@@ -189,7 +191,7 @@
 void *CASwigPython::callPycli(void*) {
 
 
-    PyEval_AcquireLock();
+    PyEval_AcquireThread(PyThreadState_Get());
     PyThreadState_Swap(pycliThreadState);
 
 	QString fileName = thr_fileName;
@@ -208,20 +210,20 @@
 
 	PyObject *pyModule = PyImport_ImportModule((char*)moduleName.toStdString().c_str());
 
-	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
+	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(PyThreadState_Get()); return NULL; }
 
 	// Get function object
 
 	//PyObject *pyFunction = PyObject_GetAttrString(pyModule, "pycli");
 	PyObject *pyFunction = PyObject_GetAttrString(pyModule, (char*)function.toStdString().c_str());
 
-	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
+	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(PyThreadState_Get()); return NULL; }
 
 	// Call the actual function
 	//
 	PyObject *ret;
-	ret = PyEval_CallObject(pyFunction, pyArgs);
-	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
+	ret = PyObject_Call(pyFunction, pyArgs, NULL);
+	if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(PyThreadState_Get()); return NULL; }
 
 //	Py_DECREF(pyFunction); // -Matevz
 //	Py_DECREF(pyArgs); /// \todo Crashes if uncommented?!d
@@ -231,7 +233,7 @@
 
 
     PyThreadState_Swap(mainThreadState);
-    PyEval_ReleaseLock();
+    PyEval_ReleaseThread(PyThreadState_Get());
 
 //	pthread_exit((void*)NULL);
     return ret;