- m.pid = pid;
- m.value = value;
- process.getChannel().send(m);
- process.cache_flags = (mc_process_cache_flags_t) 0;
- while (process.running())
- if (!this->handle_events())
- return;
+ m.pid = transition.pid_;
+ m.value = transition.argument_;
+ this->process_->get_channel().send(m);
+ this->process_->clear_cache();
+ if (this->process_->running())
+ event_base_dispatch(base_);
+}
+
+bool ModelChecker::checkDeadlock()
+{
+ int res = this->process().get_channel().send(MC_MESSAGE_DEADLOCK_CHECK);
+ xbt_assert(res == 0, "Could not check deadlock state");
+ s_mc_message_int_t message;
+ ssize_t s = mc_model_checker->process().get_channel().receive(message);
+ xbt_assert(s != -1, "Could not receive message");
+ xbt_assert(s == sizeof(message) && message.type == MC_MESSAGE_DEADLOCK_CHECK_REPLY,
+ "Received unexpected message %s (%i, size=%i) "
+ "expected MC_MESSAGE_DEADLOCK_CHECK_REPLY (%i, size=%i)",
+ MC_message_type_name(message.type), (int)message.type, (int)s, (int)MC_MESSAGE_DEADLOCK_CHECK_REPLY,
+ (int)sizeof(message));
+ return message.value != 0;