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
This commit is contained in:
Paul Davis 2008-06-02 16:16:20 +00:00
parent 4def7ed222
commit 66016dfef7
2 changed files with 30 additions and 25 deletions

View file

@ -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;

View file

@ -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) {
return jack_set_freewheel (_jack, onoff);
if (onoff) {
_freewheel_thread_registered = false;
}
return jack_set_freewheel (_jack, onoff);
} else {
/* already doing what has been asked for */
return 0;
}
} else {
return -1;