summaryrefslogtreecommitdiffstats
path: root/src/server/events/Delete.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2016-12-14 14:44:32 -0500
committerDavid Robillard <d@drobilla.net>2016-12-14 14:47:13 -0500
commitbf71b4be9f36f9d7c619053d97ab6f98bb98dc21 (patch)
treeea1d8b78defdeec76026d24fbf507c75a97629d1 /src/server/events/Delete.cpp
parenta2f86537a9fdaabe12b553a1cf066649a96b4891 (diff)
downloadingen-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.cpp11
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) {