diff --git a/tdactor/td/actor/impl/Scheduler-decl.h b/tdactor/td/actor/impl/Scheduler-decl.h index 850469945..581b39797 100644 --- a/tdactor/td/actor/impl/Scheduler-decl.h +++ b/tdactor/td/actor/impl/Scheduler-decl.h @@ -194,8 +194,7 @@ class Scheduler { void add_to_mailbox(ActorInfo *actor_info, Event &&event); void clear_mailbox(ActorInfo *actor_info); - template - void flush_mailbox(ActorInfo *actor_info, const RunFuncT &run_func, const EventFuncT &event_func); + void flush_mailbox(ActorInfo *actor_info); template void send_impl(const ActorId<> &actor_id, const RunFuncT &run_func, const EventFuncT &event_func); diff --git a/tdactor/td/actor/impl/Scheduler.cpp b/tdactor/td/actor/impl/Scheduler.cpp index 0ea0eb78a..7a4f944c8 100644 --- a/tdactor/td/actor/impl/Scheduler.cpp +++ b/tdactor/td/actor/impl/Scheduler.cpp @@ -493,6 +493,18 @@ void Scheduler::run_poll(Timestamp timeout) { #endif } +void Scheduler::flush_mailbox(ActorInfo *actor_info) { + auto &mailbox = actor_info->mailbox_; + size_t mailbox_size = mailbox.size(); + CHECK(mailbox_size != 0); + EventGuard guard(this, actor_info); + size_t i = 0; + for (; i < mailbox_size && guard.can_run(); i++) { + do_event(actor_info, std::move(mailbox[i])); + } + mailbox.erase(mailbox.begin(), mailbox.begin() + i); +} + void Scheduler::run_mailbox() { VLOG(actor) << "Run mailbox : begin"; ListNode actors_list = std::move(ready_actors_list_); @@ -500,7 +512,7 @@ void Scheduler::run_mailbox() { ListNode *node = actors_list.get(); CHECK(node); auto actor_info = ActorInfo::from_list_node(node); - flush_mailbox(actor_info, static_cast(nullptr), static_cast(nullptr)); + flush_mailbox(actor_info); } VLOG(actor) << "Run mailbox : finish " << actor_count_; diff --git a/tdactor/td/actor/impl/Scheduler.h b/tdactor/td/actor/impl/Scheduler.h index b027aaf2f..2158a2406 100644 --- a/tdactor/td/actor/impl/Scheduler.h +++ b/tdactor/td/actor/impl/Scheduler.h @@ -140,26 +140,6 @@ inline void Scheduler::destroy_actor(ActorInfo *actor_info) { CHECK(actor_count_ >= 0); } -template -void Scheduler::flush_mailbox(ActorInfo *actor_info, const RunFuncT &run_func, const EventFuncT &event_func) { - auto &mailbox = actor_info->mailbox_; - size_t mailbox_size = mailbox.size(); - CHECK(mailbox_size != 0); - EventGuard guard(this, actor_info); - size_t i = 0; - for (; i < mailbox_size && guard.can_run(); i++) { - do_event(actor_info, std::move(mailbox[i])); - } - if (run_func) { - if (guard.can_run()) { - (*run_func)(actor_info); - } else { - mailbox.insert(mailbox.begin() + i, (*event_func)()); - } - } - mailbox.erase(mailbox.begin(), mailbox.begin() + i); -} - inline void Scheduler::send_to_scheduler(int32 sched_id, const ActorId &actor_id, Event &&event) { if (sched_id == sched_id_) { ActorInfo *actor_info = actor_id.get_actor_info();