Loading automotive/vehicle/2.0/default/impl/vhal_v2_0/GeneratorHub.cpp +14 −3 Original line number Diff line number Diff line Loading @@ -31,6 +31,14 @@ namespace impl { GeneratorHub::GeneratorHub(const OnHalEvent& onHalEvent) : mOnHalEvent(onHalEvent), mThread(&GeneratorHub::run, this) {} GeneratorHub::~GeneratorHub() { mShuttingDownFlag.store(true); mCond.notify_all(); if (mThread.joinable()) { mThread.join(); } } void GeneratorHub::registerGenerator(int32_t cookie, FakeValueGeneratorPtr generator) { { std::lock_guard<std::mutex> g(mLock); Loading Loading @@ -58,15 +66,18 @@ void GeneratorHub::unregisterGenerator(int32_t cookie) { } void GeneratorHub::run() { while (true) { while (!mShuttingDownFlag.load()) { std::unique_lock<std::mutex> g(mLock); // Pop events whose generator does not exist (may be already unregistered) while (!mEventQueue.empty() && mGenerators.find(mEventQueue.top().cookie) == mGenerators.end()) { mEventQueue.pop(); } // Wait until event queue is not empty mCond.wait(g, [this] { return !mEventQueue.empty(); }); // Wait until event queue is not empty or shutting down flag is set mCond.wait(g, [this] { return !mEventQueue.empty() || mShuttingDownFlag.load(); }); if (mShuttingDownFlag.load()) { break; } const VhalEvent& curEvent = mEventQueue.top(); Loading automotive/vehicle/2.0/default/impl/vhal_v2_0/GeneratorHub.h +2 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ private: public: GeneratorHub(const OnHalEvent& onHalEvent); ~GeneratorHub() = default; ~GeneratorHub(); /** * Register a new generator. The generator will be discarded if it could not produce next event. Loading @@ -84,6 +84,7 @@ private: mutable std::mutex mLock; std::condition_variable mCond; std::thread mThread; std::atomic<bool> mShuttingDownFlag{false}; }; } // namespace impl Loading Loading
automotive/vehicle/2.0/default/impl/vhal_v2_0/GeneratorHub.cpp +14 −3 Original line number Diff line number Diff line Loading @@ -31,6 +31,14 @@ namespace impl { GeneratorHub::GeneratorHub(const OnHalEvent& onHalEvent) : mOnHalEvent(onHalEvent), mThread(&GeneratorHub::run, this) {} GeneratorHub::~GeneratorHub() { mShuttingDownFlag.store(true); mCond.notify_all(); if (mThread.joinable()) { mThread.join(); } } void GeneratorHub::registerGenerator(int32_t cookie, FakeValueGeneratorPtr generator) { { std::lock_guard<std::mutex> g(mLock); Loading Loading @@ -58,15 +66,18 @@ void GeneratorHub::unregisterGenerator(int32_t cookie) { } void GeneratorHub::run() { while (true) { while (!mShuttingDownFlag.load()) { std::unique_lock<std::mutex> g(mLock); // Pop events whose generator does not exist (may be already unregistered) while (!mEventQueue.empty() && mGenerators.find(mEventQueue.top().cookie) == mGenerators.end()) { mEventQueue.pop(); } // Wait until event queue is not empty mCond.wait(g, [this] { return !mEventQueue.empty(); }); // Wait until event queue is not empty or shutting down flag is set mCond.wait(g, [this] { return !mEventQueue.empty() || mShuttingDownFlag.load(); }); if (mShuttingDownFlag.load()) { break; } const VhalEvent& curEvent = mEventQueue.top(); Loading
automotive/vehicle/2.0/default/impl/vhal_v2_0/GeneratorHub.h +2 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ private: public: GeneratorHub(const OnHalEvent& onHalEvent); ~GeneratorHub() = default; ~GeneratorHub(); /** * Register a new generator. The generator will be discarded if it could not produce next event. Loading @@ -84,6 +84,7 @@ private: mutable std::mutex mLock; std::condition_variable mCond; std::thread mThread; std::atomic<bool> mShuttingDownFlag{false}; }; } // namespace impl Loading