diff options
-rw-r--r-- | gtk2_ardour/ardour_ui_dialogs.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/editor_summary.cc | 11 | ||||
-rw-r--r-- | gtk2_ardour/editor_summary.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/streamview.cc | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/track.h | 1 | ||||
-rw-r--r-- | libs/ardour/control_protocol_manager.cc | 8 |
8 files changed, 25 insertions, 21 deletions
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 9db664199c..87a8dede29 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -51,6 +51,10 @@ ARDOUR_UI::set_session (Session *s) { SessionHandlePtr::set_session (s); + if (!_session) { + return; + } + if (location_ui) { location_ui->set_session(s); } @@ -65,10 +69,6 @@ ARDOUR_UI::set_session (Session *s) preroll_clock.set_session (s); postroll_clock.set_session (s); - if (!_session) { - return; - } - /* sensitize menu bar options that are now valid */ ActionManager::set_sensitive (ActionManager::session_sensitive_actions, true); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index bf0b2124bb..7cc9e26339 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -436,8 +436,8 @@ Editor::Editor () transport_mark_label.set_no_show_all(); initialize_rulers (); - _summary = new EditorSummary (this); initialize_canvas (); + _summary = new EditorSummary (this); selection->TimeChanged.connect (sigc::mem_fun(*this, &Editor::time_selection_changed)); selection->TracksChanged.connect (sigc::mem_fun(*this, &Editor::track_selection_changed)); @@ -1033,6 +1033,10 @@ Editor::set_session (Session *t) { SessionHandlePtr::set_session (t); + if (!_session) { + return; + } + zoom_range_clock.set_session (_session); _playlist_selector->set_session (_session); nudge_clock.set_session (_session); @@ -1056,10 +1060,6 @@ Editor::set_session (Session *t) sfbrowser->set_session (_session); } - if (!_session) { - return; - } - compute_fixed_ruler_scale (); /* there are never any selected regions at startup */ diff --git a/gtk2_ardour/editor_summary.cc b/gtk2_ardour/editor_summary.cc index b002150622..8a62156a19 100644 --- a/gtk2_ardour/editor_summary.cc +++ b/gtk2_ardour/editor_summary.cc @@ -47,7 +47,8 @@ EditorSummary::EditorSummary (Editor* e) _zoom_dragging (false) { - + Region::RegionPropertyChanged.connect (sigc::hide (sigc::mem_fun (*this, &EditorSummary::set_dirty))); + _editor->playhead_cursor->PositionChanged.connect (sigc::mem_fun (*this, &EditorSummary::playhead_position_changed)); } /** Connect to a session. @@ -58,17 +59,13 @@ EditorSummary::set_session (Session* s) { EditorComponent::set_session (s); - Region::RegionPropertyChanged.connect (sigc::hide (sigc::mem_fun (*this, &EditorSummary::set_dirty))); + set_dirty (); if (_session) { _session_connections.add_connection (_session->RegionRemoved.connect (boost::bind (&EditorSummary::set_dirty, this))); _session_connections.add_connection (_session->StartTimeChanged.connect (boost::bind (&EditorSummary::set_dirty, this))); _session_connections.add_connection (_session->EndTimeChanged.connect (boost::bind (&EditorSummary::set_dirty, this))); } - - _editor->playhead_cursor->PositionChanged.connect (sigc::mem_fun (*this, &EditorSummary::playhead_position_changed)); - - set_dirty (); } /** Handle an expose event. @@ -504,7 +501,7 @@ EditorSummary::set_editor (pair<double,double> const & x, pair<double, double> c void EditorSummary::playhead_position_changed (nframes64_t p) { - if (int (p * _x_scale) != int (_last_playhead)) { + if (_session && int (p * _x_scale) != int (_last_playhead)) { set_overlays_dirty (); } } diff --git a/gtk2_ardour/editor_summary.h b/gtk2_ardour/editor_summary.h index 9d9763996e..e311b47ebd 100644 --- a/gtk2_ardour/editor_summary.h +++ b/gtk2_ardour/editor_summary.h @@ -1,3 +1,4 @@ + /* Copyright (C) 2009 Paul Davis diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 31841c97ba..c4fe713f58 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -167,6 +167,11 @@ RouteUI::reset () void RouteUI::self_delete () { + /* This may be called from a non-GUI thread. Keep it safe */ + + cerr << "\n\nExpect to see route " << _route->name() << " be deleted\n"; + _route.reset (); /* drop reference to route, so that it can be cleaned up */ + route_going_away_connection.disconnect (); connections.drop_connections (); delete_when_idle (this); diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index 626e2bf537..4190116294 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -92,8 +92,6 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* group) StreamView::~StreamView () { - cerr << "Streamview " << _trackview.name() << " deleted\n"; - undisplay_diskstream (); delete canvas_rect; diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index c23e159684..82b4f701b4 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -141,7 +141,6 @@ class Track : public Route FreezeRecord _freeze_record; XMLNode* pending_state; - boost::signals2::scoped_connection recenable_connection; bool _destructive; boost::shared_ptr<RecEnableControllable> _rec_enable_control; diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc index 47f8d5bf98..1e793bb71b 100644 --- a/libs/ardour/control_protocol_manager.cc +++ b/libs/ardour/control_protocol_manager.cc @@ -110,6 +110,8 @@ ControlProtocolManager::session_going_away() ControlProtocol* ControlProtocolManager::instantiate (ControlProtocolInfo& cpi) { + /* CALLER MUST HOLD LOCK */ + if (_session == 0) { return 0; } @@ -126,8 +128,6 @@ ControlProtocolManager::instantiate (ControlProtocolInfo& cpi) return 0; } - - Glib::Mutex::Lock lm (protocols_lock); control_protocols.push_back (cpi.protocol); return cpi.protocol; @@ -172,6 +172,8 @@ ControlProtocolManager::load_mandatory_protocols () return; } + Glib::Mutex::Lock lm (protocols_lock); + for (list<ControlProtocolInfo*>::iterator i = control_protocol_info.begin(); i != control_protocol_info.end(); ++i) { if ((*i)->mandatory && ((*i)->protocol == 0)) { info << string_compose (_("Instantiating mandatory control protocol %1"), (*i)->name) << endmsg; @@ -293,6 +295,8 @@ ControlProtocolManager::set_state (const XMLNode& node, int /*version*/) XMLNodeConstIterator citer; XMLProperty* prop; + Glib::Mutex::Lock lm (protocols_lock); + clist = node.children(); for (citer = clist.begin(); citer != clist.end(); ++citer) { |