From e99749aa8331cc869ccd4154fede8c43c9938f69 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Wed, 22 Jul 2020 21:44:55 +0300 Subject: [PATCH] Remove devices --- components/streams/include/ftl/streams/receiver.hpp | 2 +- components/streams/src/feed.cpp | 4 +++- components/streams/src/receiver.cpp | 13 ++++++++----- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/components/streams/include/ftl/streams/receiver.hpp b/components/streams/include/ftl/streams/receiver.hpp index ef9592262..710f25660 100644 --- a/components/streams/include/ftl/streams/receiver.hpp +++ b/components/streams/include/ftl/streams/receiver.hpp @@ -50,7 +50,7 @@ class Receiver : public ftl::Configurable, public ftl::data::Generator { ftl::data::Pool *pool_; ftl::SingletonHandler<const ftl::data::FrameSetPtr&> callback_; std::unordered_map<uint32_t, std::shared_ptr<ftl::streams::BaseBuilder>> builders_; - std::list<ftl::Handle> handles_; + std::unordered_map<uint32_t, ftl::Handle> handles_; ftl::codecs::Channel second_channel_; int64_t timestamp_; SHARED_MUTEX mutex_; diff --git a/components/streams/src/feed.cpp b/components/streams/src/feed.cpp index 2aabbd396..c8dff9d32 100644 --- a/components/streams/src/feed.cpp +++ b/components/streams/src/feed.cpp @@ -375,7 +375,9 @@ void Feed::remove(uint32_t id) { streams_.erase(id); } else if (devices_.count(id)) { - + receiver_->removeBuilder(id); + delete devices_[id]; + devices_.erase(id); } else if (renderers_.count(id)) { } diff --git a/components/streams/src/receiver.cpp b/components/streams/src/receiver.cpp index a37c4bb30..50f94771e 100644 --- a/components/streams/src/receiver.cpp +++ b/components/streams/src/receiver.cpp @@ -73,10 +73,10 @@ ftl::streams::BaseBuilder &Receiver::builder(uint32_t id) { b->setID(id); b->setPool(pool_); fb->setBufferSize(value("frameset_buffer_size", 3)); - handles_.push_back(std::move(fb->onFrameSet([this](const ftl::data::FrameSetPtr& fs) { + handles_[id] = std::move(fb->onFrameSet([this](const ftl::data::FrameSetPtr& fs) { callback_.trigger(fs); return true; - }))); + })); return *b; } else { return *(i->second); @@ -86,17 +86,20 @@ ftl::streams::BaseBuilder &Receiver::builder(uint32_t id) { void Receiver::removeBuilder(uint32_t id) { UNIQUE_LOCK(mutex_, lk); auto i = builders_.find(id); - if (i != builders_.end()) builders_.erase(i); + if (i != builders_.end()) { + handles_.erase(id); + builders_.erase(i); + } } void Receiver::registerBuilder(const std::shared_ptr<ftl::streams::BaseBuilder> &b) { auto i = builders_.find(b->id()); if (i != builders_.end()) throw FTL_Error("Builder already exists"); builders_[b->id()] = b; - handles_.push_back(std::move(b->onFrameSet([this](const ftl::data::FrameSetPtr& fs) { + handles_[b->id()] = std::move(b->onFrameSet([this](const ftl::data::FrameSetPtr& fs) { callback_.trigger(fs); return true; - }))); + })); } //void Receiver::onAudio(const ftl::audio::FrameSet::Callback &cb) { -- GitLab