summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/events
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-01-08 02:41:36 +0000
committerDavid Robillard <d@drobilla.net>2007-01-08 02:41:36 +0000
commitc5218b13bac00fbd8c3ceb99b46063b98bc1fdd3 (patch)
treecedcc8e24a0db8d0a40bcfececc25e66df2387e1 /src/libs/engine/events
parent813e0cbb39809d7cf837e6b91a75815079502f47 (diff)
downloadingen-c5218b13bac00fbd8c3ceb99b46063b98bc1fdd3.tar.gz
ingen-c5218b13bac00fbd8c3ceb99b46063b98bc1fdd3.tar.bz2
ingen-c5218b13bac00fbd8c3ceb99b46063b98bc1fdd3.zip
Fix destruction of nodes with connections to parent patch ports.
git-svn-id: http://svn.drobilla.net/lad/ingen@241 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/events')
-rw-r--r--src/libs/engine/events/DestroyEvent.cpp36
-rw-r--r--src/libs/engine/events/DisconnectionEvent.cpp5
2 files changed, 20 insertions, 21 deletions
diff --git a/src/libs/engine/events/DestroyEvent.cpp b/src/libs/engine/events/DestroyEvent.cpp
index 97a4f215..7928939e 100644
--- a/src/libs/engine/events/DestroyEvent.cpp
+++ b/src/libs/engine/events/DestroyEvent.cpp
@@ -95,17 +95,15 @@ DestroyEvent::pre_process()
}
if (_node != NULL && _path != "/") {
- assert(_node->parent_patch() != NULL);
+ assert(_node->parent_patch());
_patch_node_listnode = _node->parent_patch()->remove_node(_path.name());
- if (_patch_node_listnode != NULL) {
+ if (_patch_node_listnode) {
assert(_patch_node_listnode->elem() == _node);
_node->remove_from_store();
- if (_node->providers()->size() != 0 || _node->dependants()->size() != 0) {
- _disconnect_node_event = new DisconnectNodeEvent(_engine, _node);
- _disconnect_node_event->pre_process();
- }
+ _disconnect_node_event = new DisconnectNodeEvent(_engine, _node);
+ _disconnect_node_event->pre_process();
if (_node->parent_patch()->enabled()) {
// FIXME: is this called multiple times?
@@ -124,9 +122,9 @@ DestroyEvent::pre_process()
}
}
} else if (_port) {
- assert(_port->parent_patch() != NULL);
+ assert(_port->parent_patch());
_patch_port_listnode = _port->parent_patch()->remove_port(_path.name());
- if (_patch_port_listnode != NULL) {
+ if (_patch_port_listnode) {
assert(_patch_port_listnode->elem() == _port);
_port->remove_from_store();
@@ -153,28 +151,28 @@ DestroyEvent::execute(SampleCount nframes, FrameTime start, FrameTime end)
{
QueuedEvent::execute(nframes, start, end);
- if (_patch_node_listnode != NULL) {
+ if (_patch_node_listnode) {
assert(_node);
- if (_disconnect_node_event != NULL)
+ if (_disconnect_node_event)
_disconnect_node_event->execute(nframes, start, end);
- if (_node->parent_patch()->process_order() != NULL)
+ if (_node->parent_patch()->process_order())
_engine.maid()->push(_node->parent_patch()->process_order());
_node->parent_patch()->process_order(_process_order);
- } else if (_patch_port_listnode != NULL) {
+ } else if (_patch_port_listnode) {
assert(_port);
- if (_disconnect_port_event != NULL)
+ if (_disconnect_port_event)
_disconnect_port_event->execute(nframes, start, end);
- if (_port->parent_patch()->process_order() != NULL)
+ if (_port->parent_patch()->process_order())
_engine.maid()->push(_port->parent_patch()->process_order());
_port->parent_patch()->process_order(_process_order);
- if (_port->parent_patch()->external_ports() != NULL)
+ if (_port->parent_patch()->external_ports())
_engine.maid()->push(_port->parent_patch()->external_ports());
_port->parent_patch()->external_ports(_ports_array);
@@ -199,19 +197,19 @@ DestroyEvent::post_process()
_responder->respond_error("You can not destroy the root patch (/)");
else
_responder->respond_error("Could not find object to destroy");
- } else if (_patch_node_listnode != NULL) {
+ } else if (_patch_node_listnode) {
assert(_node);
_node->deactivate();
_responder->respond_ok();
- if (_disconnect_node_event != NULL)
+ if (_disconnect_node_event)
_disconnect_node_event->post_process();
_engine.broadcaster()->send_destroyed(_path);
_engine.maid()->push(_patch_node_listnode);
_engine.maid()->push(_node);
- } else if (_patch_port_listnode != NULL) {
+ } else if (_patch_port_listnode) {
assert(_port);
_responder->respond_ok();
- if (_disconnect_port_event != NULL)
+ if (_disconnect_port_event)
_disconnect_port_event->post_process();
_engine.broadcaster()->send_destroyed(_path);
_engine.maid()->push(_patch_port_listnode);
diff --git a/src/libs/engine/events/DisconnectionEvent.cpp b/src/libs/engine/events/DisconnectionEvent.cpp
index ef7046b8..8dc9e617 100644
--- a/src/libs/engine/events/DisconnectionEvent.cpp
+++ b/src/libs/engine/events/DisconnectionEvent.cpp
@@ -60,11 +60,12 @@ DisconnectionEvent::DisconnectionEvent(Engine& engine, SharedPtr<Responder> resp
m_typed_event(NULL),
m_error(NO_ERROR)
{
- assert(src_port->is_output());
+ // FIXME: These break for patch ports.. is that ok?
+ /*assert(src_port->is_output());
assert(dst_port->is_input());
assert(src_port->type() == dst_port->type());
assert(src_port->parent_node()->parent_patch()
- == dst_port->parent_node()->parent_patch());
+ == dst_port->parent_node()->parent_patch()); */
}
DisconnectionEvent::~DisconnectionEvent()