Commit e3526dee authored by neverlord's avatar neverlord

bugfix and CPPA_CRITICAL

parent 55e5f2c6
...@@ -176,14 +176,14 @@ class abstract_actor : public Base ...@@ -176,14 +176,14 @@ class abstract_actor : public Base
} }
else else
{ {
auto result = m_nodes.back(); mailbox_element* result = m_nodes.back();
m_nodes.pop_back(); m_nodes.pop_back();
result->next = nullptr;
result->marked = false; result->marked = false;
result->sender = sender; result->sender = sender;
result->msg = std::move(msg); result->msg = std::move(msg);
return result; return result;
} }
} }
inline void release_node(mailbox_element* node) inline void release_node(mailbox_element* node)
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
#elif defined(CPPA_GCC) #elif defined(CPPA_GCC)
# define CPPA_MEMORY_BARRIER() __sync_synchronize() # define CPPA_MEMORY_BARRIER() __sync_synchronize()
#else #else
# error Plattform and/or compiler not supportet # error Plattform and/or compiler not supported
#endif #endif
#ifdef CPPA_DEBUG #ifdef CPPA_DEBUG
...@@ -83,8 +83,18 @@ ...@@ -83,8 +83,18 @@
if ((stmt) == false) { \ if ((stmt) == false) { \
CPPA_REQUIRE__(#stmt, __FILE__, __LINE__); \ CPPA_REQUIRE__(#stmt, __FILE__, __LINE__); \
}((void) 0) }((void) 0)
#define CPPA_CRITICAL__(error, file, line) \
printf("%s:%u: critical error: '%s'\n", file, line, error); \
{ \
void *array[10]; \
size_t size = backtrace(array, 10); \
backtrace_symbols_fd(array, size, 2); \
} \
exit(7)
#define CPPA_CRITICAL(error) CPPA_CRITICAL__(error, __FILE__, __LINE__)
#else // CPPA_DEBUG #else // CPPA_DEBUG
#define CPPA_REQUIRE(unused) ((void) 0) #define CPPA_REQUIRE(unused) ((void) 0)
#define CPPA_CRITICAL(unused) exit(7)
#endif // CPPA_DEBUG #endif // CPPA_DEBUG
#endif // CPPA_CONFIG_HPP #endif // CPPA_CONFIG_HPP
...@@ -82,7 +82,7 @@ class nestable_invoke_policy ...@@ -82,7 +82,7 @@ class nestable_invoke_policy
++i; ++i;
break; break;
} }
default: exit(7); // illegal state default: CPPA_CRITICAL("illegal result of handle_message");
} }
} }
return false; return false;
...@@ -107,9 +107,12 @@ class nestable_invoke_policy ...@@ -107,9 +107,12 @@ class nestable_invoke_policy
break; break;
} }
case hm_skip_msg: case hm_skip_msg:
{
CPPA_CRITICAL("received a marked node");
}
default: default:
{ {
exit(7); // illegal state CPPA_CRITICAL("illegal result of handle_message");
} }
} }
return false; return false;
......
...@@ -57,13 +57,8 @@ struct recursive_queue_node ...@@ -57,13 +57,8 @@ struct recursive_queue_node
{ {
} }
inline recursive_queue_node(recursive_queue_node&& other) recursive_queue_node(recursive_queue_node const&) = delete;
: next(nullptr) recursive_queue_node& operator=(recursive_queue_node const&) = delete;
, marked(false)
, sender(std::move(other.sender))
, msg(std::move(other.msg))
{
}
struct guard struct guard
{ {
......
...@@ -106,7 +106,7 @@ class yielding_actor : public abstract_scheduled_actor ...@@ -106,7 +106,7 @@ class yielding_actor : public abstract_scheduled_actor
{ {
return false; return false;
} }
default: exit(7); // illegal state default: CPPA_CRITICAL("illegal result of filter_msg");
} }
return false; return false;
} }
......
...@@ -128,7 +128,7 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb) ...@@ -128,7 +128,7 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb)
{ {
return; return;
} }
default: exit(7); // illegal state default: CPPA_CRITICAL("illegal actor state");
}; };
} }
} }
...@@ -178,7 +178,7 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb) ...@@ -178,7 +178,7 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb)
++i; ++i;
break; break;
} }
default: exit(7); // illegal state default: CPPA_CRITICAL("illegal result of handle_message");
} }
} }
break; break;
...@@ -188,7 +188,7 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb) ...@@ -188,7 +188,7 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb)
m_cache.emplace_back(e); m_cache.emplace_back(e);
break; break;
} }
default: exit(7); // illegal state default: CPPA_CRITICAL("illegal result of handle_message");
} }
} }
} }
......
...@@ -164,8 +164,7 @@ void yielding_actor::resume(util::fiber* from, scheduler::callback* callback) ...@@ -164,8 +164,7 @@ void yielding_actor::resume(util::fiber* from, scheduler::callback* callback)
} }
default: default:
{ {
// illegal state CPPA_CRITICAL("illegal yield result");
exit(7);
} }
} }
break; break;
......
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