simplify uv::Context::Exit()

This commit is contained in:
falsycat 2023-08-16 12:31:42 +09:00
parent ad7683fd44
commit 62d44dae63

View File

@ -29,14 +29,7 @@ class Context : public subsys::Interface {
Context(const char* name, Env& env) Context(const char* name, Env& env)
: subsys::Interface(name), : subsys::Interface(name),
logger_(env.GetOr<subsys::Logger>(NullLogger::instance())), logger_(env.GetOr<subsys::Logger>(NullLogger::instance())),
loop_(MakeLoop()), loop_(MakeLoop()) { }
stop_(Make<uvw::async_handle>()) {
stop_->unreference();
stop_->on<uvw::async_event>([loop = loop_, logger = logger_](auto&, auto&) {
loop->stop();
logger->Trace("stopped loop iteration");
});
}
public: public:
~Context() noexcept override { ~Context() noexcept override {
@ -58,13 +51,8 @@ class Context : public subsys::Interface {
throw Exception {"failed to allocate libuv resource"}; throw Exception {"failed to allocate libuv resource"};
} }
// THREAD-SAFE
void Exit() noexcept { void Exit() noexcept {
if (0 == stop_->send()) { loop_->stop();
logger_->Info("requested to exit uv loop");
} else {
logger_->Error("a request to exit is dismissed");
}
} }
const std::shared_ptr<uvw::loop>& loop() const noexcept { return loop_; } const std::shared_ptr<uvw::loop>& loop() const noexcept { return loop_; }
@ -84,9 +72,7 @@ class Context : public subsys::Interface {
private: private:
const std::shared_ptr<subsys::Logger> logger_; const std::shared_ptr<subsys::Logger> logger_;
const std::shared_ptr<uvw::loop> loop_; const std::shared_ptr<uvw::loop> loop_;
const std::shared_ptr<uvw::async_handle> stop_;
}; };
class MainContext : public Context { class MainContext : public Context {