summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/element.cpp8
-rw-r--r--lib/hier_block.cpp11
2 files changed, 8 insertions, 11 deletions
diff --git a/lib/element.cpp b/lib/element.cpp
index 6d116e9..83466c2 100644
--- a/lib/element.cpp
+++ b/lib/element.cpp
@@ -52,8 +52,12 @@ ElementImpl::~ElementImpl(void)
Element &Element::shared_to_element(void)
{
- this->weak_self = this->shared_from_this();
- return *this;
+ try
+ {
+ this->weak_self = this->shared_from_this();
+ }
+ catch(...){}
+ return this->derived_to_element();
}
long Element::unique_id(void) const
diff --git a/lib/hier_block.cpp b/lib/hier_block.cpp
index 36e1b9d..6c95e9b 100644
--- a/lib/hier_block.cpp
+++ b/lib/hier_block.cpp
@@ -45,13 +45,6 @@ void HierBlock::disconnect(const Element &elem)
(*this)->topology->remove_topology(elem->topology.get());
}
-static Apology::Wax get_elem_ref(const Element &elem)
-{
- boost::shared_ptr<Element> shared_elem = elem.weak_self.lock();
- if (shared_elem) return shared_elem;
- return elem;
-}
-
void HierBlock::connect(
const Element &src,
const size_t src_index,
@@ -60,8 +53,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, get_elem_ref(src)),
- Apology::Port(sink->get_elem(), sink_index, get_elem_ref(sink))
+ Apology::Port(src->get_elem(), src_index, src.weak_self.lock()),
+ Apology::Port(sink->get_elem(), sink_index, sink.weak_self.lock())
);
(*this)->topology->add_flow(flow);
}