summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc8
-rw-r--r--gtk2_ardour/editor.cc10
-rw-r--r--gtk2_ardour/editor_summary.cc11
-rw-r--r--gtk2_ardour/editor_summary.h1
-rw-r--r--gtk2_ardour/route_ui.cc5
-rw-r--r--gtk2_ardour/streamview.cc2
-rw-r--r--libs/ardour/ardour/track.h1
-rw-r--r--libs/ardour/control_protocol_manager.cc8
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) {