diff options
author | David Robillard <d@drobilla.net> | 2016-12-14 14:44:32 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2016-12-14 14:47:13 -0500 |
commit | bf71b4be9f36f9d7c619053d97ab6f98bb98dc21 (patch) | |
tree | ea1d8b78defdeec76026d24fbf507c75a97629d1 /src/server/events/Delete.cpp | |
parent | a2f86537a9fdaabe12b553a1cf066649a96b4891 (diff) | |
download | ingen-bf71b4be9f36f9d7c619053d97ab6f98bb98dc21.tar.gz ingen-bf71b4be9f36f9d7c619053d97ab6f98bb98dc21.tar.bz2 ingen-bf71b4be9f36f9d7c619053d97ab6f98bb98dc21.zip |
Fix real-time safety of control bindings
Diffstat (limited to 'src/server/events/Delete.cpp')
-rw-r--r-- | src/server/events/Delete.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/server/events/Delete.cpp b/src/server/events/Delete.cpp index d04f176c..b77f7c3e 100644 --- a/src/server/events/Delete.cpp +++ b/src/server/events/Delete.cpp @@ -56,6 +56,9 @@ Delete::~Delete() { delete _disconnect_event; delete _compiled_graph; + for (ControlBindings::Binding* b : _removed_bindings) { + delete b; + } } bool @@ -65,7 +68,7 @@ Delete::pre_process(PreProcessContext& ctx) return Event::pre_process_done(Status::NOT_DELETABLE, _path); } - _removed_bindings = _engine.control_bindings()->remove(_path); + _engine.control_bindings()->get_all(_path, _removed_bindings); Store::iterator iter = _engine.store()->find(_path); if (iter == _engine.store()->end()) { @@ -131,6 +134,10 @@ Delete::execute(RunContext& context) _disconnect_event->execute(context); } + if (!_removed_bindings.empty()) { + _engine.control_bindings()->remove(context, _removed_bindings); + } + GraphImpl* parent = _block ? _block->parent_graph() : NULL; if (_port) { parent = _port->parent_graph(); @@ -150,8 +157,6 @@ Delete::execute(RunContext& context) void Delete::post_process() { - _removed_bindings.reset(); - Broadcaster::Transfer t(*_engine.broadcaster()); if (respond() == Status::SUCCESS && (_block || _port)) { if (_block) { |