summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/hier_block.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/hier_block.cpp b/lib/hier_block.cpp
index 6c95e9b..a7ea896 100644
--- a/lib/hier_block.cpp
+++ b/lib/hier_block.cpp
@@ -45,6 +45,13 @@ void HierBlock::disconnect(const Element &elem)
(*this)->topology->remove_topology(elem->topology.get());
}
+static Apology::Wax get_ref(const Element &elem)
+{
+ boost::shared_ptr<Element> shared_self = elem.weak_self.lock();
+ if (shared_self) return shared_self;
+ return elem;
+}
+
void HierBlock::connect(
const Element &src,
const size_t src_index,
@@ -53,8 +60,8 @@ void HierBlock::connect(
){
//TODO, this is the perfect place to validate IO sigs
const Apology::Flow flow(
- Apology::Port(src->get_elem(), src_index, src.weak_self.lock()),
- Apology::Port(sink->get_elem(), sink_index, sink.weak_self.lock())
+ Apology::Port(src->get_elem(), src_index, get_ref(src)),
+ Apology::Port(sink->get_elem(), sink_index, get_ref(sink))
);
(*this)->topology->add_flow(flow);
}