Significantly changed how the Python interpreter lock and thread state
are managed, which should fix the problem of running on a multi-processor machine. Some fixes for some of the contributed library modules. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11614 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		| @@ -273,25 +273,25 @@ public: | ||||
|     } | ||||
|  | ||||
|     void OnExit() { | ||||
|         bool doSave = wxPyRestoreThread(); | ||||
|         wxPyTState* state = wxPyBeginBlockThreads(); | ||||
|         Py_DECREF(m_tagHandlerClass); | ||||
|         m_tagHandlerClass = NULL; | ||||
|         for (size_t x=0; x < m_objArray.GetCount(); x++) { | ||||
|             PyObject* obj = (PyObject*)m_objArray.Item(x); | ||||
|             Py_DECREF(obj); | ||||
|         } | ||||
|         wxPySaveThread(doSave); | ||||
|         wxPyEndBlockThreads(state); | ||||
|     }; | ||||
|  | ||||
|     void FillHandlersTable(wxHtmlWinParser *parser) { | ||||
|         // Wave our magic wand...  (if it works it's a miracle!  ;-) | ||||
|  | ||||
|         // First, make a new instance of the tag handler | ||||
|         bool doSave = wxPyRestoreThread(); | ||||
|         wxPyTState* state = wxPyBeginBlockThreads(); | ||||
|         PyObject* arg = Py_BuildValue("()"); | ||||
|         PyObject* obj = PyInstance_New(m_tagHandlerClass, arg, NULL); | ||||
|         Py_DECREF(arg); | ||||
|         wxPySaveThread(doSave); | ||||
|         wxPyEndBlockThreads(state); | ||||
|  | ||||
|         // now figure out where it's C++ object is... | ||||
|         wxPyHtmlWinTagHandler* thPtr; | ||||
| @@ -431,15 +431,16 @@ IMPLEMENT_ABSTRACT_CLASS( wxPyHtmlWindow, wxHtmlWindow ); | ||||
| IMP_PYCALLBACK__STRING(wxPyHtmlWindow, wxHtmlWindow, OnSetTitle); | ||||
|  | ||||
| void wxPyHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) { | ||||
|     bool doSave = wxPyRestoreThread(); | ||||
|     if (wxPyCBH_findCallback(m_myInst, "OnLinkClicked")) { | ||||
|     bool found; | ||||
|     wxPyTState* state = wxPyBeginBlockThreads(); | ||||
|     if ((found = wxPyCBH_findCallback(m_myInst, "OnLinkClicked)"))) { | ||||
|         PyObject* obj = wxPyConstructObject((void*)&link, "wxHtmlLinkInfo", 0); | ||||
|         wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); | ||||
|         Py_DECREF(obj); | ||||
|     } | ||||
|     else | ||||
|     wxPyEndBlockThreads(state); | ||||
|     if (! found) | ||||
|         wxHtmlWindow::OnLinkClicked(link); | ||||
|     wxPySaveThread(doSave); | ||||
| } | ||||
| void wxPyHtmlWindow::base_OnLinkClicked(const wxHtmlLinkInfo& link) { | ||||
|     wxHtmlWindow::OnLinkClicked(link); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user