Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- src/scripting/swigpython.cpp.orig 2018-08-29 19:52:30.095049098 -0400
- +++ src/scripting/swigpython.cpp 2018-09-03 17:34:43.664386850 -0400
- @@ -40,6 +40,11 @@
- void CASwigPython::init() {
- Py_Initialize();
- + /* NOTE: As of Python 3.7 PyEval_InitThreads() is called by
- + * Py_Initialize()
- + * But it does no harm as calling it additional times is a no-op
- + * Clemmitt M. Sigler, cmsigler (dot) online (at) gmail (dot) com
- + * 2018/9/3 */
- PyEval_InitThreads(); // our python will use GIL
- PyInit__CanorusPython();
- @@ -78,16 +83,14 @@
- #endif
- mainThreadState = PyThreadState_Get();
- - PyEval_ReleaseLock();
- // my section with thread initialization
- -PyEval_AcquireLock();
- PyInterpreterState * mainInterpreterState = mainThreadState->interp;
- pycliThreadState = PyThreadState_New(mainInterpreterState);
- - PyThreadState_Swap(mainThreadState);
- + PyThreadState_Swap(pycliThreadState);
- -PyEval_ReleaseLock();
- + PyEval_ReleaseThread(pycliThreadState);
- }
- /*!
- @@ -136,7 +139,7 @@
- QString moduleName = fileName.left(fileName.lastIndexOf(".py"));
- moduleName = moduleName.remove(0, moduleName.lastIndexOf("/")+1);
- - PyEval_AcquireLock();
- + PyEval_AcquireThread(pycliThreadState);
- PyObject *pyModule;
- if (autoReload) {
- @@ -152,11 +155,11 @@
- } 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(pycliThreadState); 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(pycliThreadState); return NULL; }
- // Call the actual function
- PyObject *ret;
- @@ -164,7 +167,7 @@
- ret = PyEval_CallObject(pyFunction, pyArgs);
- else
- ret = PyEval_CallObject(pyFunction, NULL);
- - if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
- + if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(pycliThreadState); return NULL; }
- // Py_DECREF(pyFunction); // -Matevz
- // Py_DECREF(pyModule); // -Matevz
- @@ -172,7 +175,7 @@
- // for (int i=0; i<args.size(); i++)
- // Py_DECREF(args[i]); // -Matevz
- - PyEval_ReleaseLock();
- + PyEval_ReleaseThread(pycliThreadState);
- return ret;
- }
- @@ -189,7 +192,7 @@
- void *CASwigPython::callPycli(void*) {
- - PyEval_AcquireLock();
- + PyEval_AcquireThread(pycliThreadState);
- PyThreadState_Swap(pycliThreadState);
- QString fileName = thr_fileName;
- @@ -208,20 +211,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(pycliThreadState); 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(pycliThreadState); return NULL; }
- // Call the actual function
- //
- PyObject *ret;
- ret = PyEval_CallObject(pyFunction, pyArgs);
- - if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
- + if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(pycliThreadState); return NULL; }
- // Py_DECREF(pyFunction); // -Matevz
- // Py_DECREF(pyArgs); /// \todo Crashes if uncommented?!d
- @@ -231,7 +234,7 @@
- PyThreadState_Swap(mainThreadState);
- - PyEval_ReleaseLock();
- + PyEval_ReleaseThread(pycliThreadState);
- // pthread_exit((void*)NULL);
- return ret;
- --- src/widgets/pyconsole.cpp.orig 2018-08-29 19:52:28.865044343 -0400
- +++ src/widgets/pyconsole.cpp 2018-09-03 14:59:45.969697237 -0400
- @@ -314,14 +314,14 @@
- // blocking operation;
- PyThreadState_Swap(CASwigPython::mainThreadState);
- -PyEval_ReleaseLock();
- +PyEval_ReleaseThread(CASwigPython::mainThreadState);
- //Py_BEGIN_ALLOW_THREADS
- _thrWaitMut->lock();
- _thrWait->wait(_thrWaitMut);
- //Py_END_ALLOW_THREADS
- -PyEval_AcquireLock();
- +PyEval_AcquireThread(CASwigPython::pycliThreadState);
- PyThreadState_Swap(CASwigPython::pycliThreadState);
- QString *str = new QString(_bufSend); //put contents of _bufSend into buffer \todo: synch
Advertisement
Add Comment
Please, Sign In to add comment