diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-04-25 11:03:54 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-04-25 11:03:56 +0200 |
| commit | 293f82daa07bbc357940e5dd214f7c534bab0a86 (patch) | |
| tree | fb604e1508c04e31336c0c121afadc0662369686 /src/tools/dcpomatic.cc | |
| parent | e87f943433216d294b22853411eca5c582be1066 (diff) | |
Don't use wx_ptr for the splash screen.
Using wx_ptr in the wxApp object seems bad because in ~App wxWidgets
deletes all top-level windows in `DeleteAllTLWs` so if ~wx_ptr then
tries to destroy them we get a use-after-free.
Diffstat (limited to 'src/tools/dcpomatic.cc')
| -rw-r--r-- | src/tools/dcpomatic.cc | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index a7b3af8bc..3d944e780 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -1709,7 +1709,7 @@ private: } catch (exception& e) { - _splash.reset(); + close_splash(); error_dialog (nullptr, wxString::Format ("DCP-o-matic could not start."), std_to_wx(e.what())); } @@ -1821,7 +1821,8 @@ private: void close_splash () { - _splash.reset(); + _splash->Destroy(); + _splash = nullptr; } void config_failed_to_load (Config::LoadFailure what) @@ -1839,7 +1840,7 @@ private: /* Destroy the splash screen here, as otherwise bad things seem to happen (for reasons unknown) when we open our recreate dialog, close it, *then* try to Destroy the splash (the Destroy fails). */ - _splash.reset(); + close_splash(); auto config = Config::instance(); switch (reason) { @@ -1908,7 +1909,7 @@ private: } DOMFrame* _frame = nullptr; - wx_ptr<wxSplashScreen> _splash; + wxSplashScreen* _splash; shared_ptr<wxTimer> _timer; string _film_to_load; string _film_to_create; |
