aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-04-01 15:18:31 +0000
committerDavid Robillard <d@drobilla.net>2007-04-01 15:18:31 +0000
commit719fc353d389b936cc1c064d512453268283b424 (patch)
tree52f8f03f8185c85b3e3bfd56f234374adae390c2 /src/engine
parent9d60d35ca6dc8e2561a1984cbe622325afa55a84 (diff)
downloadmachina-719fc353d389b936cc1c064d512453268283b424.tar.gz
machina-719fc353d389b936cc1c064d512453268283b424.tar.bz2
machina-719fc353d389b936cc1c064d512453268283b424.zip
Fixed exception bug.
git-svn-id: http://svn.drobilla.net/lad/machina@387 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/JackDriver.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/engine/JackDriver.cpp b/src/engine/JackDriver.cpp
index d19bdeb..7a2b03d 100644
--- a/src/engine/JackDriver.cpp
+++ b/src/engine/JackDriver.cpp
@@ -179,6 +179,13 @@ JackDriver::write_event(Raul::BeatTime time,
size_t size,
const byte* event) throw (std::logic_error)
{
+ if (_cycle_time.beats_to_ticks(time) + _cycle_time.offset_ticks() < _cycle_time.start_ticks()) {
+ std::cerr << "ERROR: Missed event by "
+ << _cycle_time.start_ticks() - (_cycle_time.beats_to_ticks(time) + _cycle_time.offset_ticks())
+ << "ticks." << std::endl;
+ return;
+ }
+
const TickCount nframes = _cycle_time.length_ticks();
const TickCount offset = _cycle_time.beats_to_ticks(time)
+ _cycle_time.offset_ticks() - _cycle_time.start_ticks();
@@ -221,9 +228,11 @@ JackDriver::on_process(jack_nframes_t nframes)
if (machine != _last_machine) {
if (_last_machine) {
assert(!_last_machine.unique()); // Realtime, can't delete
+ _last_machine->set_sink(shared_from_this());
_last_machine->reset(); // Exit all active states
_last_machine.reset(); // Cut our reference
}
+ _cycle_time.set_start(0);
_machine_changed.post(); // Signal we're done with it
}