Commit 7388bc71 authored by Dominik Charousset's avatar Dominik Charousset

Fix decorating of scheduled actions

parent 5477e042
...@@ -32,7 +32,6 @@ public: ...@@ -32,7 +32,6 @@ public:
void dispose() override { void dispose() override {
decorated_->dispose(); decorated_->dispose();
worker_ = nullptr;
} }
bool disposed() const noexcept override { bool disposed() const noexcept override {
...@@ -76,8 +75,9 @@ public: ...@@ -76,8 +75,9 @@ public:
private: private:
void do_run(strong_actor_ptr& ptr) { void do_run(strong_actor_ptr& ptr) {
ptr->enqueue(nullptr, make_message_id(), make_message(action{decorated_}), if (!decorated_->disposed())
nullptr); ptr->enqueue(nullptr, make_message_id(), make_message(action{decorated_}),
nullptr);
} }
action::impl_ptr decorated_; action::impl_ptr decorated_;
...@@ -87,6 +87,7 @@ private: ...@@ -87,6 +87,7 @@ private:
template <class WorkerPtr> template <class WorkerPtr>
action decorate(action f, WorkerPtr worker) { action decorate(action f, WorkerPtr worker) {
CAF_ASSERT(f.ptr() != nullptr); CAF_ASSERT(f.ptr() != nullptr);
CAF_ASSERT(worker != nullptr);
using impl_t = action_decorator<WorkerPtr>; using impl_t = action_decorator<WorkerPtr>;
auto ptr = make_counted<impl_t>(std::move(f).as_intrusive_ptr(), auto ptr = make_counted<impl_t>(std::move(f).as_intrusive_ptr(),
std::move(worker)); std::move(worker));
...@@ -113,12 +114,14 @@ disposable actor_clock::schedule(action f) { ...@@ -113,12 +114,14 @@ disposable actor_clock::schedule(action f) {
disposable actor_clock::schedule(time_point t, action f, disposable actor_clock::schedule(time_point t, action f,
strong_actor_ptr worker) { strong_actor_ptr worker) {
return schedule(t, decorate(std::move(f), std::move(worker))); schedule(t, decorate(f, std::move(worker)));
return std::move(f).as_disposable();
} }
disposable actor_clock::schedule(time_point t, action f, disposable actor_clock::schedule(time_point t, action f,
weak_actor_ptr worker) { weak_actor_ptr worker) {
return schedule(t, decorate(std::move(f), std::move(worker))); schedule(t, decorate(f, std::move(worker)));
return std::move(f).as_disposable();
} }
disposable actor_clock::schedule_message(time_point t, disposable actor_clock::schedule_message(time_point t,
...@@ -128,8 +131,7 @@ disposable actor_clock::schedule_message(time_point t, ...@@ -128,8 +131,7 @@ disposable actor_clock::schedule_message(time_point t,
[rptr{std::move(receiver)}, cptr{std::move(content)}]() mutable { [rptr{std::move(receiver)}, cptr{std::move(content)}]() mutable {
rptr->enqueue(std::move(cptr), nullptr); rptr->enqueue(std::move(cptr), nullptr);
}); });
schedule(t, f); return schedule(t, std::move(f));
return std::move(f).as_disposable();
} }
disposable actor_clock::schedule_message(time_point t, weak_actor_ptr receiver, disposable actor_clock::schedule_message(time_point t, weak_actor_ptr receiver,
...@@ -139,8 +141,7 @@ disposable actor_clock::schedule_message(time_point t, weak_actor_ptr receiver, ...@@ -139,8 +141,7 @@ disposable actor_clock::schedule_message(time_point t, weak_actor_ptr receiver,
if (auto ptr = actor_cast<strong_actor_ptr>(rptr)) if (auto ptr = actor_cast<strong_actor_ptr>(rptr))
ptr->enqueue(std::move(cptr), nullptr); ptr->enqueue(std::move(cptr), nullptr);
}); });
schedule(t, f); return schedule(t, std::move(f));
return std::move(f).as_disposable();
} }
disposable actor_clock::schedule_message(time_point t, group target, disposable actor_clock::schedule_message(time_point t, group target,
...@@ -151,8 +152,7 @@ disposable actor_clock::schedule_message(time_point t, group target, ...@@ -151,8 +152,7 @@ disposable actor_clock::schedule_message(time_point t, group target,
dst->enqueue(std::move(sender), make_message_id(), std::move(content), dst->enqueue(std::move(sender), make_message_id(), std::move(content),
nullptr); nullptr);
}); });
schedule(t, f); return schedule(t, std::move(f));
return std::move(f).as_disposable();
} }
} // namespace caf } // namespace caf
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment