summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-06-02 16:16:20 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-06-02 16:16:20 +0000
commit66016dfef77df2c5f6bcb0bc44ffd7cb38b83f87 (patch)
tree6706a94dd3cc046d1de63606e1386f44c137c9bb /libs
parent4def7ed222bd860e54510d5a5e4d3efcca065052 (diff)
don't double-call JackStartFreewheeling if we're already freewheeling
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3434 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/audioengine.h35
-rw-r--r--libs/ardour/audioengine.cc20
2 files changed, 30 insertions, 25 deletions
diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h
index 31c892a2b7..6ba141248c 100644
--- a/libs/ardour/ardour/audioengine.h
+++ b/libs/ardour/ardour/audioengine.h
@@ -202,24 +202,25 @@ class AudioEngine : public sigc::trackable
std::string make_port_name_non_relative (std::string);
private:
- ARDOUR::Session *session;
- jack_client_t *_jack;
- std::string jack_client_name;
- Glib::Mutex _process_lock;
- Glib::Cond session_removed;
- bool session_remove_pending;
- bool _running;
- bool _has_run;
- nframes_t _buffer_size;
- nframes_t _frame_rate;
- nframes_t monitor_check_interval;
- nframes_t last_monitor_check;
- nframes_t _processed_frames;
- bool _freewheeling;
- bool _freewheel_thread_registered;
+ ARDOUR::Session* session;
+ jack_client_t* _jack;
+ std::string jack_client_name;
+ Glib::Mutex _process_lock;
+ Glib::Cond session_removed;
+ bool session_remove_pending;
+ bool _running;
+ bool _has_run;
+ nframes_t _buffer_size;
+ nframes_t _frame_rate;
+ nframes_t monitor_check_interval;
+ nframes_t last_monitor_check;
+ nframes_t _processed_frames;
+ bool _freewheeling;
+ bool _freewheel_pending;
+ bool _freewheel_thread_registered;
sigc::slot<int,nframes_t> freewheel_action;
- bool reconnect_on_halt;
- int _usecs_per_cycle;
+ bool reconnect_on_halt;
+ int _usecs_per_cycle;
typedef std::set<Port*> Ports;
SerializedRCUManager<Ports> ports;
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 9521dfe730..15ccd852f7 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -63,13 +63,12 @@ AudioEngine::AudioEngine (string client_name)
last_monitor_check = 0;
monitor_check_interval = max_frames;
_processed_frames = 0;
- _freewheeling = false;
_usecs_per_cycle = 0;
_jack = 0;
_frame_rate = 0;
_buffer_size = 0;
- _freewheeling = false;
_freewheel_thread_registered = false;
+ _freewheeling = false;
m_meter_thread = 0;
g_atomic_int_set (&m_meter_exit, 0);
@@ -295,8 +294,6 @@ AudioEngine::process_callback (nframes_t nframes)
if (_freewheeling) {
if (Freewheel (nframes)) {
- cerr << "Freewheeling returned non-zero!\n";
- _freewheeling = false;
jack_set_freewheel (_jack, false);
}
return 0;
@@ -1025,11 +1022,18 @@ AudioEngine::freewheel (bool onoff)
{
if (_jack) {
- if (onoff) {
- _freewheel_thread_registered = false;
- }
+ if (onoff != _freewheeling) {
+
+ if (onoff) {
+ _freewheel_thread_registered = false;
+ }
+
+ return jack_set_freewheel (_jack, onoff);
- return jack_set_freewheel (_jack, onoff);
+ } else {
+ /* already doing what has been asked for */
+ return 0;
+ }
} else {
return -1;