void ActorImpl::simcall_answer()
{
if (this != simix_global->maestro_) {
- XBT_DEBUG("Answer simcall %s (%d) issued by %s (%p)", SIMIX_simcall_name(simcall_.call_), (int)simcall_.call_,
- get_cname(), this);
+ XBT_DEBUG("Answer simcall %s issued by %s (%p)", SIMIX_simcall_name(simcall_), get_cname(), this);
xbt_assert(simcall_.call_ != simix::Simcall::NONE);
simcall_.call_ = simix::Simcall::NONE;
xbt_assert(not XBT_LOG_ISENABLED(simix_process, xbt_log_priority_debug) ||
break;
default:
- type = SIMIX_simcall_name(req->call_);
+ type = SIMIX_simcall_name(*req);
args = "??";
break;
}
std::unique_ptr<State> state = std::move(stack_.back());
stack_.pop_back();
if (reductionMode_ == ReductionMode::dpor) {
- auto call = state->executed_req_.call_;
kernel::actor::ActorImpl* issuer = api::get().simcall_get_issuer(&state->executed_req_);
for (auto i = stack_.rbegin(); i != stack_.rend(); ++i) {
State* prev_state = i->get();
if (state->executed_req_.issuer_ == prev_state->executed_req_.issuer_) {
- XBT_DEBUG("Simcall %s and %s with same issuer", SIMIX_simcall_name(call),
- SIMIX_simcall_name(prev_state->executed_req_.call_));
+ XBT_DEBUG("Simcall %s and %s with same issuer", SIMIX_simcall_name(state->executed_req_),
+ SIMIX_simcall_name(prev_state->executed_req_));
break;
} else if (api::get().simcall_check_dependency(&state->internal_req_, &prev_state->internal_req_)) {
if (XBT_LOG_ISENABLED(mc_safety, xbt_log_priority_debug)) {
} else {
const kernel::actor::ActorImpl* previous_issuer = api::get().simcall_get_issuer(&prev_state->executed_req_);
XBT_DEBUG("Simcall %s, process %ld (state %d) and simcall %s, process %ld (state %d) are independent",
- SIMIX_simcall_name(call), issuer->get_pid(), state->num_,
- SIMIX_simcall_name(prev_state->executed_req_.call_), previous_issuer->get_pid(), prev_state->num_);
+ SIMIX_simcall_name(state->executed_req_), issuer->get_pid(), state->num_,
+ SIMIX_simcall_name(prev_state->executed_req_), previous_issuer->get_pid(), prev_state->num_);
}
}
}
#include "popping_bodies.cpp"
+#include <boost/core/demangle.hpp>
+#include <string>
+
/**
* @ingroup simix_host_management
* @brief Waits for the completion of an execution synchro and destroy it.
/* ************************************************************************** */
/** @brief returns a printable string representing a simcall */
-const char* SIMIX_simcall_name(Simcall kind)
-{
- return simcall_names[static_cast<int>(kind)];
+const char* SIMIX_simcall_name(const s_smx_simcall& simcall)
+{
+ if (simcall.observer_ != nullptr) {
+ static std::string name;
+ name = boost::core::demangle(typeid(*simcall.observer_).name());
+ const char* cname = name.c_str();
+ if (name.rfind("simgrid::kernel::", 0) == 0)
+ cname += 17; // strip prefix "simgrid::kernel::"
+ return cname;
+ } else {
+ return simcall_names[static_cast<int>(simcall.call_)];
+ }
}
namespace simgrid {
smx_actor_t self = SIMIX_process_self();
simgrid::simix::marshal(&self->simcall_, call, t...);
if (self != simix_global->maestro_) {
- XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->get_cname(), SIMIX_simcall_name(self->simcall_.call_),
- (int)self->simcall_.call_);
+ XBT_DEBUG("Yield process '%s' on simcall %s", self->get_cname(), SIMIX_simcall_name(self->simcall_));
self->yield();
} else {
self->simcall_handle(0);
*/
void simgrid::kernel::actor::ActorImpl::simcall_handle(int times_considered)
{
- XBT_DEBUG("Handling simcall %p: %s", &simcall_, SIMIX_simcall_name(simcall_.call_));
+ XBT_DEBUG("Handling simcall %p: %s", &simcall_, SIMIX_simcall_name(simcall_));
simcall_.mc_value_ = times_considered;
if (simcall_.observer_ != nullptr)
simcall_.observer_->prepare(times_considered);
/******************************** General *************************************/
-XBT_PRIVATE const char* SIMIX_simcall_name(simgrid::simix::Simcall kind);
+XBT_PRIVATE const char* SIMIX_simcall_name(const s_smx_simcall& simcall);
XBT_PRIVATE void SIMIX_run_kernel(std::function<void()> const* code);
XBT_PRIVATE void SIMIX_run_blocking(std::function<void()> const* code);
fd.write(' */\n')
fd.write('void simgrid::kernel::actor::ActorImpl::simcall_handle(int times_considered)\n')
fd.write('{\n')
- fd.write(' XBT_DEBUG("Handling simcall %p: %s", &simcall_, SIMIX_simcall_name(simcall_.call_));\n')
+ fd.write(' XBT_DEBUG("Handling simcall %p: %s", &simcall_, SIMIX_simcall_name(simcall_));\n')
fd.write(' simcall_.mc_value_ = times_considered;\n')
fd.write(' if (simcall_.observer_ != nullptr)\n')
fd.write(' simcall_.observer_->prepare(times_considered);\n')
smx_actor_t self = SIMIX_process_self();
simgrid::simix::marshal(&self->simcall_, call, t...);
if (self != simix_global->maestro_) {
- XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->get_cname(), SIMIX_simcall_name(self->simcall_.call_),
- (int)self->simcall_.call_);
+ XBT_DEBUG("Yield process '%s' on simcall %s", self->get_cname(), SIMIX_simcall_name(self->simcall_));
self->yield();
} else {
self->simcall_handle(0);
(xbt_log_no_loc ? (size_t)0xDEADBEEF : (size_t)actor->waiting_synchro_.get()),
actor->waiting_synchro_->get_cname(), (int)actor->waiting_synchro_->state_);
} else {
- XBT_INFO("Actor %ld (%s@%s) simcall %s", actor->get_pid(), actor->get_cname(), actor->get_host()->get_cname(), SIMIX_simcall_name(actor->simcall_.call_));
+ XBT_INFO("Actor %ld (%s@%s) simcall %s", actor->get_pid(), actor->get_cname(), actor->get_host()->get_cname(),
+ SIMIX_simcall_name(actor->simcall_));
}
}
}