Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Make SIMCALL_MUTEX_TRYLOCK visible and forbid usage of MUTEX operations with...
[simgrid.git] / src / mc / mc_base.cpp
index c0f9ab9..74c8268 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2014. The SimGrid Team.
+/* Copyright (c) 2008-2015. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
 #include "mc/mc_record.h"
 #include "mc/mc_replay.h"
 #include "mc/mc.h"
+#include "mc_protocol.h"
 
 #ifdef HAVE_MC
 #include "mc_process.h"
 #include "ModelChecker.hpp"
-#include "mc_protocol.h"
 #include "mc_smx.h"
 #include "mc_server.h"
 #endif
@@ -30,6 +30,15 @@ extern "C" {
 
 XBT_LOG_NEW_CATEGORY(mc, "All MC categories");
 
+int MC_random(int min, int max)
+{
+  xbt_assert(mc_mode != MC_MODE_SERVER);
+  /* TODO, if the MC is disabled we do not really need to make a simcall for
+   * this :) */
+  /* FIXME: return mc_current_state->executed_transition->random.value; */
+  return simcall_mc_random(min, max);
+}
+
 void MC_wait_for_requests(void)
 {
 #ifdef HAVE_MC
@@ -133,6 +142,9 @@ int MC_request_is_enabled(smx_simcall_t req)
     return FALSE;
   }
 
+  case SIMCALL_MUTEX_TRYLOCK:
+    return TRUE;
+
   case SIMCALL_MUTEX_LOCK: {
     smx_mutex_t mutex = simcall_mutex_lock__get__mutex(req);
 #ifdef HAVE_MC
@@ -170,6 +182,7 @@ int MC_request_is_visible(smx_simcall_t req)
       || req->call == SIMCALL_COMM_TESTANY
       || req->call == SIMCALL_MC_RANDOM
       || req->call == SIMCALL_MUTEX_LOCK
+      || req->call == SIMCALL_MUTEX_TRYLOCK
 #ifdef HAVE_MC
       || req->call == SIMCALL_MC_SNAPSHOT
       || req->call == SIMCALL_MC_COMPARE_SNAPSHOTS