Don't CleanUpModules when reinitializing.

This commit is contained in:
Robin Dunn
2018-01-29 19:48:29 -08:00
parent 068e500d28
commit 8ddac86fd2

View File

@@ -549,10 +549,22 @@ inline PyObject* i_wxPyMethod_Self(PyObject* method) {
void i_wxPyReinitializeModules() {
if (i_wxPyCheckForApp(false)) {
wxModule::CleanUpModules();
// NOTE: We are intentionally NOT calling wxModule::CleanUpModules
// here because that could clear some things that will not be reset
// when used again, leading to crashes. For example, in
// wxMSWDCImpl::DoGradientFillLinear it is saving a pointer to an API
// function in a dyn-loaded DLL. When modules are cleaned up then that
// DLL will be unloaded, leaving a dangling function pointer. We'll
// likely end up with multiple instances of some things, but that is
// better than the alternaive currently.
//wxModule::CleanUpModules();
wxModule::RegisterModules();
wxModule::InitializeModules();
wxInitAllImageHandlers();
// And since we're not calling CleanUpModules there is no longer any
// need to re-init the image handlers.
//wxInitAllImageHandlers();
}
}