Fix the crash-on-ActiveX-callback problem
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16054 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -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
|
C++ and therefore does not need any of the modules from win32 all and
|
||||||
so it is less fragile in the face of changes.
|
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
|
2.3.2.1
|
||||||
|
@@ -586,7 +586,15 @@ void wxPySaveThreadState(PyThreadState* tstate) {
|
|||||||
for(size_t i=0; i < wxPyTStates->GetCount(); i++) {
|
for(size_t i=0; i < wxPyTStates->GetCount(); i++) {
|
||||||
wxPyThreadState& info = wxPyTStates->Item(i);
|
wxPyThreadState& info = wxPyTStates->Item(i);
|
||||||
if (info.tid == ctid) {
|
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();
|
wxPyTMutex->Unlock();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user