cmsigler

[canorus] python-3.7_new.patch

Sep 3rd, 2018
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.58 KB | None | 0 0
  1. --- src/scripting/swigpython.cpp.orig 2018-08-29 19:52:30.095049098 -0400
  2. +++ src/scripting/swigpython.cpp 2018-09-03 17:34:43.664386850 -0400
  3. @@ -40,6 +40,11 @@
  4. void CASwigPython::init() {
  5.  
  6. Py_Initialize();
  7. + /* NOTE: As of Python 3.7 PyEval_InitThreads() is called by
  8. + * Py_Initialize()
  9. + * But it does no harm as calling it additional times is a no-op
  10. + * Clemmitt M. Sigler, cmsigler (dot) online (at) gmail (dot) com
  11. + * 2018/9/3 */
  12. PyEval_InitThreads(); // our python will use GIL
  13.  
  14. PyInit__CanorusPython();
  15. @@ -78,16 +83,14 @@
  16. #endif
  17.  
  18. mainThreadState = PyThreadState_Get();
  19. - PyEval_ReleaseLock();
  20.  
  21. // my section with thread initialization
  22. -PyEval_AcquireLock();
  23. PyInterpreterState * mainInterpreterState = mainThreadState->interp;
  24.  
  25. pycliThreadState = PyThreadState_New(mainInterpreterState);
  26. - PyThreadState_Swap(mainThreadState);
  27. + PyThreadState_Swap(pycliThreadState);
  28.  
  29. -PyEval_ReleaseLock();
  30. + PyEval_ReleaseThread(pycliThreadState);
  31. }
  32.  
  33. /*!
  34. @@ -136,7 +139,7 @@
  35. QString moduleName = fileName.left(fileName.lastIndexOf(".py"));
  36. moduleName = moduleName.remove(0, moduleName.lastIndexOf("/")+1);
  37.  
  38. - PyEval_AcquireLock();
  39. + PyEval_AcquireThread(pycliThreadState);
  40.  
  41. PyObject *pyModule;
  42. if (autoReload) {
  43. @@ -152,11 +155,11 @@
  44. } else {
  45. pyModule = PyImport_ImportModule((char*)moduleName.toStdString().c_str());
  46. }
  47. - if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
  48. + if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(pycliThreadState); return NULL; }
  49.  
  50. // Get function object
  51. PyObject *pyFunction = PyObject_GetAttrString(pyModule, (char*)function.toStdString().c_str());
  52. - if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
  53. + if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(pycliThreadState); return NULL; }
  54.  
  55. // Call the actual function
  56. PyObject *ret;
  57. @@ -164,7 +167,7 @@
  58. ret = PyEval_CallObject(pyFunction, pyArgs);
  59. else
  60. ret = PyEval_CallObject(pyFunction, NULL);
  61. - if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
  62. + if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(pycliThreadState); return NULL; }
  63.  
  64. // Py_DECREF(pyFunction); // -Matevz
  65. // Py_DECREF(pyModule); // -Matevz
  66. @@ -172,7 +175,7 @@
  67. // for (int i=0; i<args.size(); i++)
  68. // Py_DECREF(args[i]); // -Matevz
  69.  
  70. - PyEval_ReleaseLock();
  71. + PyEval_ReleaseThread(pycliThreadState);
  72. return ret;
  73. }
  74.  
  75. @@ -189,7 +192,7 @@
  76. void *CASwigPython::callPycli(void*) {
  77.  
  78.  
  79. - PyEval_AcquireLock();
  80. + PyEval_AcquireThread(pycliThreadState);
  81. PyThreadState_Swap(pycliThreadState);
  82.  
  83. QString fileName = thr_fileName;
  84. @@ -208,20 +211,20 @@
  85.  
  86. PyObject *pyModule = PyImport_ImportModule((char*)moduleName.toStdString().c_str());
  87.  
  88. - if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
  89. + if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(pycliThreadState); return NULL; }
  90.  
  91. // Get function object
  92.  
  93. //PyObject *pyFunction = PyObject_GetAttrString(pyModule, "pycli");
  94. PyObject *pyFunction = PyObject_GetAttrString(pyModule, (char*)function.toStdString().c_str());
  95.  
  96. - if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
  97. + if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(pycliThreadState); return NULL; }
  98.  
  99. // Call the actual function
  100. //
  101. PyObject *ret;
  102. ret = PyEval_CallObject(pyFunction, pyArgs);
  103. - if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseLock(); return NULL; }
  104. + if (PyErr_Occurred()) { PyErr_Print(); PyEval_ReleaseThread(pycliThreadState); return NULL; }
  105.  
  106. // Py_DECREF(pyFunction); // -Matevz
  107. // Py_DECREF(pyArgs); /// \todo Crashes if uncommented?!d
  108. @@ -231,7 +234,7 @@
  109.  
  110.  
  111. PyThreadState_Swap(mainThreadState);
  112. - PyEval_ReleaseLock();
  113. + PyEval_ReleaseThread(pycliThreadState);
  114.  
  115. // pthread_exit((void*)NULL);
  116. return ret;
  117. --- src/widgets/pyconsole.cpp.orig 2018-08-29 19:52:28.865044343 -0400
  118. +++ src/widgets/pyconsole.cpp 2018-09-03 14:59:45.969697237 -0400
  119. @@ -314,14 +314,14 @@
  120.  
  121. // blocking operation;
  122. PyThreadState_Swap(CASwigPython::mainThreadState);
  123. -PyEval_ReleaseLock();
  124. +PyEval_ReleaseThread(CASwigPython::mainThreadState);
  125.  
  126. //Py_BEGIN_ALLOW_THREADS
  127. _thrWaitMut->lock();
  128. _thrWait->wait(_thrWaitMut);
  129. //Py_END_ALLOW_THREADS
  130.  
  131. -PyEval_AcquireLock();
  132. +PyEval_AcquireThread(CASwigPython::pycliThreadState);
  133. PyThreadState_Swap(CASwigPython::pycliThreadState);
  134.  
  135. QString *str = new QString(_bufSend); //put contents of _bufSend into buffer \todo: synch
Advertisement
Add Comment
Please, Sign In to add comment