summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2006-10-12 15:20:00 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2006-10-12 15:20:00 +0000
commit833f33b0c95aadafa22f09a5d341805a86372281 (patch)
treeb0f97bfd786a8861286a2cb4c5f7b7370c589531 /libs/ardour
parentbd9d6a3254b6ccb9e891b78aea5da1b77c4d2275 (diff)
fixes for meter thread using free'd member of AudioEngine, audiostreamview accessing deleted crossfades, and mute button now has sensible text color when active
git-svn-id: svn://localhost/ardour2/trunk@982 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/audioengine.h6
-rw-r--r--libs/ardour/ardour/session.h1
-rw-r--r--libs/ardour/audioengine.cc28
-rw-r--r--libs/ardour/port.cc3
4 files changed, 25 insertions, 13 deletions
diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h
index e53eb8a85e..7f42aff40c 100644
--- a/libs/ardour/ardour/audioengine.h
+++ b/libs/ardour/ardour/audioengine.h
@@ -247,8 +247,10 @@ class AudioEngine : public sigc::trackable
void meter_thread ();
void start_metering_thread ();
- Glib::Thread* m_meter_thread;
- mutable gint m_meter_exit;
+ void stop_metering_thread ();
+
+ Glib::Thread* m_meter_thread;
+ static gint m_meter_exit;
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 2453f30cbf..0cbc168329 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -243,6 +243,7 @@ class Session : public PBD::StatefulDestructible
void set_dirty ();
void set_clean ();
bool dirty() const { return _state_of_the_state & Dirty; }
+ bool deletion_in_progress() const { return _state_of_the_state & Deletion; }
sigc::signal<void> DirtyChanged;
std::string sound_dir (bool with_path = true) const;
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 2268411aca..4ea9cd66f8 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -43,8 +43,7 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
-nframes_t Port::_short_over_length = 2;
-nframes_t Port::_long_over_length = 10;
+gint AudioEngine::m_meter_exit;
AudioEngine::AudioEngine (string client_name)
: ports (new Ports)
@@ -65,7 +64,7 @@ AudioEngine::AudioEngine (string client_name)
_freewheel_thread_registered = false;
m_meter_thread = 0;
- m_meter_exit = false;
+ g_atomic_int_set (&m_meter_exit, 0);
if (connect_to_jack (client_name)) {
throw NoBackendAvailable ();
@@ -81,9 +80,7 @@ AudioEngine::~AudioEngine ()
jack_client_close (_jack);
}
- if(m_meter_thread) {
- g_atomic_int_inc(&m_meter_exit);
- }
+ stop_metering_thread ();
}
void
@@ -366,10 +363,20 @@ AudioEngine::jack_bufsize_callback (nframes_t nframes)
}
void
+AudioEngine::stop_metering_thread ()
+{
+ if (m_meter_thread) {
+ g_atomic_int_set (&m_meter_exit, 1);
+ }
+ m_meter_thread->join ();
+ m_meter_thread = 0;
+}
+
+void
AudioEngine::start_metering_thread ()
{
- if(m_meter_thread == 0) {
- m_meter_thread = Glib::Thread::create (sigc::mem_fun(this, &AudioEngine::meter_thread), false);
+ if (m_meter_thread == 0) {
+ m_meter_thread = Glib::Thread::create (sigc::mem_fun(this, &AudioEngine::meter_thread), true);
}
}
@@ -377,10 +384,9 @@ void
AudioEngine::meter_thread ()
{
while (g_atomic_int_get(&m_meter_exit) != true) {
- Glib::usleep (10000); /* 1/100th sec interval */
- IO::update_meters ();
+ Glib::usleep (10000); /* 1/100th sec interval */
+ IO::update_meters ();
}
- return;
}
void
diff --git a/libs/ardour/port.cc b/libs/ardour/port.cc
index 7ec0d5a05a..6f3a8f858a 100644
--- a/libs/ardour/port.cc
+++ b/libs/ardour/port.cc
@@ -23,6 +23,9 @@
using namespace ARDOUR;
using namespace std;
+nframes_t Port::_short_over_length = 2;
+nframes_t Port::_long_over_length = 10;
+
Port::Port (jack_port_t *p)
: _port (p)
{