Don't use PyThreadState_Swap to get the current tstate, block threads
only if the current tstate is not the one expected. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26426 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1059,15 +1059,14 @@ bool wxPyBeginBlockThreads() {
|
||||
// This works in for 2.3, maybe a good alternative to find the needed tstate?
|
||||
// PyThreadState *check = PyGILState_GetThisThreadState();
|
||||
|
||||
// get the currect tstate by swapping in NULL and then putting it back.
|
||||
PyThreadState *current = PyThreadState_Swap(NULL);
|
||||
PyThreadState_Swap(current);
|
||||
PyThreadState *current = _PyThreadState_Current;
|
||||
|
||||
// Only block if there wasn't alrady a tstate. This cen happen with
|
||||
// nested calls to wxPyBeginBlockThreads
|
||||
// Only block if there wasn't already a tstate, or if the current one is
|
||||
// not the one we are wanting to change to. This should prevent deadlock
|
||||
// if there are nested calls to wxPyBeginBlockThreads
|
||||
bool blocked = false;
|
||||
if (current == NULL) {
|
||||
wxPyThreadState* tstate = wxPyGetThreadState();
|
||||
wxPyThreadState* tstate = wxPyGetThreadState();
|
||||
if (current != tstate->tstate) {
|
||||
PyEval_RestoreThread(tstate->tstate);
|
||||
blocked = true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user