Potential fix for crash on loading a new film after starting an audio analysis.
authorCarl Hetherington <cth@carlh.net>
Wed, 15 Jun 2016 23:51:15 +0000 (00:51 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 15 Jun 2016 23:51:15 +0000 (00:51 +0100)
src/wx/audio_dialog.cc
src/wx/audio_panel.cc
src/wx/audio_panel.h
src/wx/content_panel.cc
src/wx/content_panel.h
src/wx/dcp_panel.cc

index b2fb0ef..c753de5 100644 (file)
@@ -218,7 +218,10 @@ void
 AudioDialog::analysis_finished ()
 {
        shared_ptr<const Film> film = _film.lock ();
-       DCPOMATIC_ASSERT (film);
+       if (!film) {
+               /* This should not happen, but if it does we should just give up quietly */
+               return;
+       }
 
        if (!boost::filesystem::exists (film->audio_analysis_path (_playlist))) {
                /* We analysed and still nothing showed up, so maybe it was cancelled or it failed.
index a2ede0b..ab26329 100644 (file)
@@ -362,3 +362,13 @@ AudioPanel::reference_clicked ()
 
        d->set_reference_audio (_reference->GetValue ());
 }
+
+void
+AudioPanel::set_film (shared_ptr<Film>)
+{
+       /* We are changing film, so destroy any audio dialog for the old one */
+       if (_audio_dialog) {
+               _audio_dialog->Destroy ();
+               _audio_dialog = 0;
+       }
+}
index aabfd71..fe9f1cd 100644 (file)
@@ -38,6 +38,7 @@ public:
        void film_changed (Film::Property);
        void film_content_changed (int);
        void content_selection_changed ();
+       void set_film (boost::shared_ptr<Film>);
 
 private:
        void show_clicked ();
index d1a00c0..b7878d3 100644 (file)
@@ -403,6 +403,8 @@ ContentPanel::setup_sensitivity ()
 void
 ContentPanel::set_film (shared_ptr<Film> film)
 {
+       _audio_panel->set_film (film);
+
        _film = film;
 
        film_changed (Film::CONTENT);
index fe48e1e..e1a6677 100644 (file)
@@ -32,6 +32,7 @@ class wxListEvent;
 class TimelineDialog;
 class FilmEditor;
 class ContentSubPanel;
+class AudioPanel;
 class Film;
 class FilmViewer;
 
@@ -93,7 +94,7 @@ private:
        wxButton* _later;
        wxButton* _timeline;
        ContentSubPanel* _video_panel;
-       ContentSubPanel* _audio_panel;
+       AudioPanel* _audio_panel;
        ContentSubPanel* _subtitle_panel;
        ContentSubPanel* _timing_panel;
        std::list<ContentSubPanel *> _panels;
index 66a0842..461aeca 100644 (file)
@@ -496,6 +496,12 @@ DCPPanel::dcp_content_type_changed ()
 void
 DCPPanel::set_film (shared_ptr<Film> film)
 {
+       /* We are changing film, so destroy any audio dialog for the old one */
+       if (_audio_dialog) {
+               _audio_dialog->Destroy ();
+               _audio_dialog = 0;
+       }
+
        _film = film;
 
        film_changed (Film::NAME);