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:
Robin Dunn
2004-03-28 16:59:56 +00:00
parent f8ae31dcc5
commit 27b60fafb8

View File

@@ -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;
}