diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2006-10-12 15:20:00 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2006-10-12 15:20:00 +0000 |
commit | 833f33b0c95aadafa22f09a5d341805a86372281 (patch) | |
tree | b0f97bfd786a8861286a2cb4c5f7b7370c589531 /libs/ardour | |
parent | bd9d6a3254b6ccb9e891b78aea5da1b77c4d2275 (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.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 1 | ||||
-rw-r--r-- | libs/ardour/audioengine.cc | 28 | ||||
-rw-r--r-- | libs/ardour/port.cc | 3 |
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) { |