aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/Engine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/Engine.cpp')
-rw-r--r--src/engine/Engine.cpp21
1 files changed, 8 insertions, 13 deletions
diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp
index c43d643..047abb9 100644
--- a/src/engine/Engine.cpp
+++ b/src/engine/Engine.cpp
@@ -62,15 +62,13 @@ Engine::new_driver(Raul::Forge& forge,
SPtr<Machine>
Engine::load_machine(const Glib::ustring& uri)
{
- SPtr<Machine> machine = _loader.load(uri);
- SPtr<Machine> old_machine;
+ SPtr<Machine> machine = _loader.load(uri);
+ SPtr<Machine> old_machine = _driver->machine(); // Keep reference
if (machine) {
- old_machine = _driver->machine(); // Keep a reference to old machine...
- _driver->set_machine(machine); // Switch driver to new machine
+ _driver->set_machine(machine); // Switch driver to new machine and wait
}
- // .. and drop it in this thread (to prevent deallocation in the RT thread)
-
+ // Drop (possibly last) reference to old_machine in this thread
return machine;
}
@@ -82,16 +80,13 @@ Engine::load_machine_midi(const Glib::ustring& uri,
double q,
Raul::TimeDuration dur)
{
- SPtr<SMFDriver> file_driver(new SMFDriver(_forge, dur.unit()));
- SPtr<Machine> machine = file_driver->learn(uri, q, dur);
- SPtr<Machine> old_machine;
+ SPtr<Machine> machine = _loader.load_midi(uri, q, dur);
+ SPtr<Machine> old_machine = _driver->machine(); // Keep reference
if (machine) {
- old_machine = _driver->machine(); // Keep a reference to old machine...
- _driver->set_machine(machine); // Switch driver to new machine
+ _driver->set_machine(machine); // Switch driver to new machine and wait
}
- // .. and drop it in this thread (to prevent deallocation in the RT thread)
-
+ // Drop (possibly last) reference to old_machine in this thread
return machine;
}