Fix various crashes on session close.
authorCarl Hetherington <carl@carlh.net>
Thu, 26 Nov 2009 13:26:30 +0000 (13:26 +0000)
committerCarl Hetherington <carl@carlh.net>
Thu, 26 Nov 2009 13:26:30 +0000 (13:26 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6186 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui_dependents.cc
libs/ardour/route.cc

index 630716b4a1fbe3d41caa2649ab40fc5f1569b251..c51df14a74d65dd79f4eba5450257d68ea863397 100644 (file)
@@ -775,8 +775,15 @@ If you still wish to quit, please use the\n\n\
                        }
                }
 
+               second_connection.disconnect ();
+               point_one_second_connection.disconnect ();
+               point_oh_five_second_connection.disconnect ();
+               point_zero_one_second_connection.disconnect();
+               
                // session->set_deletion_in_progress ();
+               session->remove_pending_capture_state ();
                delete session;
+               session = 0;
        }
 
        ArdourDialog::close_all_dialogs ();
index 0850d0d70785a1292dce0a265bf226e7fd38acd4..9a9a575e73b11d5628d3daf637b2a0292e48b173 100644 (file)
@@ -50,12 +50,6 @@ using namespace ARDOUR;
 void
 ARDOUR_UI::shutdown ()
 {
-       if (session) {
-               /* we're exiting cleanly, so remove any auto-save data */
-               session->remove_pending_capture_state ();
-               session = 0;
-       }
-
        ui_config->save_state();
 }
 
@@ -124,6 +118,7 @@ ARDOUR_UI::toggle_editor_mixer_on_top ()
        }
 }
 
+/** The main editor window has been closed */
 gint
 ARDOUR_UI::exit_on_main_window_close (GdkEventAny * /*ev*/)
 {
index 8d7c170759aa9e4ca84e056b4cebdad907d5fbf4..912e80c0ea5bf20fa951b5f098390c70e317fe65 100644 (file)
@@ -163,8 +163,14 @@ Route::~Route ()
 {
        Metering::disconnect (_meter_connection);
 
-       clear_processors (PreFader);
-       clear_processors (PostFader);
+       /* don't use clear_processors here, as it depends on the session which may
+          be half-destroyed by now */
+
+       Glib::RWLock::WriterLock lm (_processor_lock);
+       for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
+               (*i)->drop_references ();
+       }
+       _processors.clear ();
 }
 
 void