diff --git a/source/kelgin/async.cpp b/source/kelgin/async.cpp index e259255..0f710c3 100644 --- a/source/kelgin/async.cpp +++ b/source/kelgin/async.cpp @@ -290,7 +290,8 @@ void ConveyorSinks::add(Conveyor &&sink) { Own sink_node = nullptr; try { - sink_node = heap(std::move(nas.first), *this); + sink_node = + heap(nas.second, std::move(nas.first), *this); } catch (std::bad_alloc &) { return; } diff --git a/source/kelgin/async.h b/source/kelgin/async.h index 283abcb..141467f 100644 --- a/source/kelgin/async.h +++ b/source/kelgin/async.h @@ -469,6 +469,7 @@ private: std::queue>> storage; public: + AdaptConveyorNode(); ~AdaptConveyorNode(); void setFeeder(AdaptConveyorFeeder *feeder); @@ -677,11 +678,14 @@ private: ConveyorSinks *conveyor_sink; public: - SinkConveyorNode(Own &&node, ConveyorSinks &conv_sink) - : child(std::move(node)), conveyor_sink{&conv_sink} {} + SinkConveyorNode(ConveyorStorage *child_store, Own node, + ConveyorSinks &conv_sink) + : ConveyorEventStorage{child_store}, child{std::move(node)}, + conveyor_sink{&conv_sink} {} - SinkConveyorNode(Own &&node) - : child(std::move(node)), conveyor_sink{nullptr} {} + SinkConveyorNode(ConveyorStorage *child_store, Own node) + : ConveyorEventStorage{child_store}, child{std::move(node)}, + conveyor_sink{nullptr} {} // Event only queued if a critical error occured void fire() override { @@ -788,7 +792,7 @@ private: MergeConveyorNode *merger; public: - Appendage(ConveyorStorage *child_str, Own n, + Appendage(ConveyorStorage *child_store, Own n, MergeConveyorNode &m) : ConveyorStorage{child_store}, child{std::move(n)}, merger{&m} {} diff --git a/source/kelgin/async.tmpl.h b/source/kelgin/async.tmpl.h index b951d27..bffca82 100644 --- a/source/kelgin/async.tmpl.h +++ b/source/kelgin/async.tmpl.h @@ -84,7 +84,8 @@ std::pair, MergeConveyor> Conveyor::merge() { template <> template SinkConveyor Conveyor::sink(ErrorFunc &&error_func) { - Own sink_node = heap(std::move(node)); + Own sink_node = + heap(storage, std::move(node)); ConveyorStorage *storage_ptr = static_cast(sink_node.get()); if (storage) { @@ -284,6 +285,9 @@ template size_t AdaptConveyorFeeder::space() const { return 0; } +template +AdaptConveyorNode::AdaptConveyorNode() : ConveyorEventStorage{nullptr} {} + template AdaptConveyorNode::~AdaptConveyorNode() { if (feeder) { feeder->setFeedee(nullptr);