From: Robin Dunn Date: Sat, 6 Jul 2002 00:55:46 +0000 (+0000) Subject: Fix the crash-on-ActiveX-callback problem X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/763d71e4420363190f63cf0e99e3a391ca7e90c6 Fix the crash-on-ActiveX-callback problem git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16054 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/wxPython/CHANGES.txt b/wxPython/CHANGES.txt index 0964ceba0e..6de0030784 100644 --- a/wxPython/CHANGES.txt +++ b/wxPython/CHANGES.txt @@ -142,6 +142,13 @@ ActiveXWrapper already in the library, but it is implemented all in C++ and therefore does not need any of the modules from win32 all and so it is less fragile in the face of changes. +Fixed the ActiveXWrapper problem. Looks like when the win32com +modules make a "callback" that they (incorrectly, IMHO) allocate a +transient thread state structure. Since wxPython is now saving +tstates for it's own callbacks it ended up using garbage after +win32com gots rid of the tstate... + + 2.3.2.1 diff --git a/wxPython/src/helpers.cpp b/wxPython/src/helpers.cpp index bc9dab8071..8be7e483b5 100644 --- a/wxPython/src/helpers.cpp +++ b/wxPython/src/helpers.cpp @@ -586,7 +586,15 @@ void wxPySaveThreadState(PyThreadState* tstate) { for(size_t i=0; i < wxPyTStates->GetCount(); i++) { wxPyThreadState& info = wxPyTStates->Item(i); if (info.tid == ctid) { - info.tstate = tstate; +#if 0 + if (info.tstate != tstate) + wxLogMessage("*** tstate mismatch!???"); +#endif + // info.tstate = tstate; *** DO NOT updating existing ones??? + // Normally it will never change, but apparently COM callbacks + // (i.e. ActiveX controls) will (incorrectly IMHO) use a transient + // tstate wich will then be garbage the next time we try to use + // it... wxPyTMutex->Unlock(); return; }