Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git] / src / mc / ModelChecker.cpp
index bc69fbe..af180ca 100644 (file)
@@ -30,7 +30,6 @@
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_ignore.h"
 #include "src/mc/mc_exit.h"
-#include "src/mc/mc_liveness.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_ModelChecker, mc, "ModelChecker");
 
@@ -118,9 +117,6 @@ void ModelChecker::start()
   if ((_sg_mc_dot_output_file != nullptr) && (_sg_mc_dot_output_file[0] != '\0'))
     MC_init_dot_output();
 
-  /* Init parmap */
-  //parmap = xbt_parmap_mc_new(xbt_os_get_numcores(), XBT_PARMAP_DEFAULT);
-
   setup_ignore();
 
   ptrace(PTRACE_SETOPTIONS, pid, nullptr, PTRACE_O_TRACEEXIT);
@@ -176,7 +172,7 @@ void ModelChecker::resume(simgrid::mc::Process& process)
   int res = process.getChannel().send(MC_MESSAGE_CONTINUE);
   if (res)
     throw simgrid::xbt::errno_error(res);
-  process.cache_flags = (mc_process_cache_flags_t) 0;
+  process.clear_cache();
 }
 
 static
@@ -434,11 +430,30 @@ void ModelChecker::simcall_handle(simgrid::mc::Process& process, unsigned long p
   m.pid   = pid;
   m.value = value;
   process.getChannel().send(m);
-  process.cache_flags = (mc_process_cache_flags_t) 0;
+  process.clear_cache();
   while (process.running())
     if (!this->handle_events())
       return;
 }
 
+bool ModelChecker::checkDeadlock()
+{
+  int res;
+  if ((res = this->process().getChannel().send(MC_MESSAGE_DEADLOCK_CHECK)))
+    xbt_die("Could not check deadlock state");
+  s_mc_int_message_t message;
+  ssize_t s = mc_model_checker->process().getChannel().receive(message);
+  if (s == -1)
+    xbt_die("Could not receive message");
+  if (s != sizeof(message) || message.type != MC_MESSAGE_DEADLOCK_CHECK_REPLY)
+    xbt_die("%s received unexpected message %s (%i, size=%i) "
+      "expected MC_MESSAGE_DEADLOCK_CHECK_REPLY (%i, size=%i)",
+      MC_mode_name(mc_mode),
+      MC_message_type_name(message.type), (int) message.type, (int) s,
+      (int) MC_MESSAGE_DEADLOCK_CHECK_REPLY, (int) sizeof(message)
+      );
+  return message.value != 0;
+}
+
 }
 }