Commit ae4ceb4b authored by Dominik Charousset's avatar Dominik Charousset

maintenance

parent d90fc078
......@@ -89,10 +89,12 @@ class abstract_scheduled_actor : public abstract_actor<scheduled_actor> {
if (d.valid()) {
if (d.is_zero()) {
// immediately enqueue timeout
enqueue(nullptr, make_any_tuple(atom("TIMEOUT"), ++m_active_timeout_id));
enqueue(nullptr, make_any_tuple(atom("TIMEOUT"),
++m_active_timeout_id));
}
else {
get_scheduler()->delayed_send(this, d, atom("TIMEOUT"), ++m_active_timeout_id);
get_scheduler()->delayed_send(this, d, atom("TIMEOUT"),
++m_active_timeout_id);
m_has_pending_timeout_request = true;
}
}
......@@ -162,16 +164,16 @@ class abstract_scheduled_actor : public abstract_actor<scheduled_actor> {
private:
bool enqueue_node(typename super::mailbox_element* node,
int target_state = ready) {
int next_state = ready) {
CPPA_REQUIRE(node->marked == false);
if (this->m_mailbox._push_back(node)) {
for (;;) {
int state = m_state.load();
switch (state) {
case blocked: {
if (m_state.compare_exchange_weak(state, target_state)) {
if (m_state.compare_exchange_weak(state, next_state)) {
CPPA_REQUIRE(this->m_scheduler != nullptr);
if (target_state == ready) {
if (next_state == ready) {
this->m_scheduler->enqueue(this);
}
return true;
......
......@@ -86,9 +86,7 @@ class event_based_actor : public detail::abstract_scheduled_actor {
event_based_actor();
bool has_behavior() {
return m_bhvr_stack.empty() == false;
}
virtual bool has_behavior();
// provoke compiler errors for usage of receive() and related functions
......@@ -127,11 +125,11 @@ class event_based_actor : public detail::abstract_scheduled_actor {
receive(std::forward<Args>(args)...);
}
void do_become(behavior* bhvr, bool has_ownership, bool discard_old_bhvr);
void do_become(behavior* bhvr, bool owns_bhvr, bool discard_old);
private:
inline behavior& current_behavior() {
inline behavior& get_behavior() {
CPPA_REQUIRE(m_bhvr_stack.empty() == false);
return m_bhvr_stack.back();
}
......@@ -143,7 +141,7 @@ class event_based_actor : public detail::abstract_scheduled_actor {
m_has_pending_timeout_request = false;
bhvr.handle_timeout();
if (m_bhvr_stack.empty() == false) {
request_timeout(current_behavior().timeout());
request_timeout(get_behavior().timeout());
}
}
......@@ -151,7 +149,7 @@ class event_based_actor : public detail::abstract_scheduled_actor {
// to prevent possible segfaults that can occur if a currently executed
// lambda gets deleted
detail::behavior_stack m_bhvr_stack;
detail::receive_policy m_recv_policy;
detail::receive_policy m_policy;
};
......
......@@ -62,7 +62,8 @@ resume_result event_based_actor::resume(util::fiber*) {
if (!e) {
m_state.store(abstract_scheduled_actor::about_to_block);
if (m_mailbox.can_fetch_more() == false) {
switch (compare_exchange_state(abstract_scheduled_actor::about_to_block,
switch (compare_exchange_state(
abstract_scheduled_actor::about_to_block,
abstract_scheduled_actor::blocked)) {
case abstract_scheduled_actor::ready: {
break;
......@@ -75,7 +76,7 @@ resume_result event_based_actor::resume(util::fiber*) {
}
}
else {
if (m_recv_policy.invoke(this, e, current_behavior())) {
if (m_policy.invoke(this, e, get_behavior())) {
// try to match cached message before receiving new ones
do {
m_bhvr_stack.cleanup();
......@@ -83,7 +84,7 @@ resume_result event_based_actor::resume(util::fiber*) {
done_cb();
return resume_result::actor_done;
}
} while (m_recv_policy.invoke_from_cache(this, current_behavior()));
} while (m_policy.invoke_from_cache(this, get_behavior()));
}
}
}
......@@ -94,13 +95,15 @@ resume_result event_based_actor::resume(util::fiber*) {
return resume_result::actor_done;
}
void event_based_actor::do_become(behavior* bhvr,
bool has_ownership,
bool discard_old_bhvr) {
bool event_based_actor::has_behavior() {
return m_bhvr_stack.empty() == false;
}
void event_based_actor::do_become(behavior* ptr, bool owner, bool discard_old) {
reset_timeout();
request_timeout(bhvr->timeout());
if (discard_old_bhvr) m_bhvr_stack.pop_back();
m_bhvr_stack.push_back(bhvr, has_ownership);
request_timeout(ptr->timeout());
if (discard_old) m_bhvr_stack.pop_back();
m_bhvr_stack.push_back(ptr, owner);
}
void event_based_actor::quit(std::uint32_t reason) {
......
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