diff --git a/main.cc b/main.cc index db9db2b..c917636 100644 --- a/main.cc +++ b/main.cc @@ -76,14 +76,14 @@ class Env final : public nf7::Env { ::Env::Pop(); } - void ExecMain(const std::shared_ptr&, Task&& task) noexcept override { - main_.Push(std::move(task)); + void ExecMain(const std::shared_ptr& ctx, Task&& task) noexcept override { + main_.Push({ctx, std::move(task)}); } - void ExecSub(const std::shared_ptr&, Task&& task) noexcept override { - sub_.Push(std::move(task)); + void ExecSub(const std::shared_ptr& ctx, Task&& task) noexcept override { + sub_.Push({ctx, std::move(task)}); } - void ExecAsync(const std::shared_ptr&, Task&& task) noexcept override { - async_.Push(std::move(task)); + void ExecAsync(const std::shared_ptr& ctx, Task&& task) noexcept override { + async_.Push({ctx, std::move(task)}); } void Handle(const File::Event& e) noexcept override @@ -177,9 +177,10 @@ class Env final : public nf7::Env { std::unordered_map> watchers_map_; std::unordered_map> watchers_rmap_; - Queue main_; - Queue sub_; - WaitQueue async_; + using TaskItem = std::pair, Task>; + Queue main_; + Queue sub_; + WaitQueue async_; std::mutex mtx_; std::condition_variable cv_; @@ -241,7 +242,7 @@ class Env final : public nf7::Env { // exec main tasks while (auto task = main_.Pop()) try { - (*task)(); + task->second(); } catch (Exception&) { Panic(); } @@ -252,7 +253,7 @@ class Env final : public nf7::Env { const auto task = sub_.Pop(); if (!task) break; try { - (*task)(); + task->second(); } catch (Exception&) { Panic(); } @@ -266,7 +267,7 @@ class Env final : public nf7::Env { while (alive_) { while (auto task = async_.Pop()) try { - (*task)(); + task->second(); } catch (Exception&) { // TODO: how to handle? }